laravel - 查询与 slug 而不是 id 的 hasMany 关系?
问题描述
我正在尝试基于 slug 查询一个类别及其所有频道。
作品
\App\Category::find(1)->channels()->get();
不工作
\App\Category::where('slug','animals')->channels()->get()
带有消息的 BadMethodCallException 'Method Illuminate/Database/Query/Builder::channels 不存在。'
类别模型上的关系
public function channels()
{
return $this->hasMany(Channel::class,'category_id');
}
解决方案
假设您在迁移和模型属性中正确设置了slug字段(从异常消息中看起来像这样)。
正在做
\App\Category::find(1)->channels()->get();
在引擎盖下相当于
\App\Category::where('category_id', 1)->first()->channels()->get();
因此,您需要的是get
实际执行查询的类别,然后能够从水合模型中检索通道。
\App\Category::where('slug', 'animals')->first()->channels()->get();
应该工作以及
\App\Category::where('slug', 'animals')->first()->channels; // calling as attribute will perform the get() on the relationship
另请注意,您可能会利用其他方法,例如with()
预先加载关系,first()
执行获取并确保您只获取一个实例,并将关系调用为属性,如上所示。参考文档
推荐阅读
- sqlite - 使用 where 子句条件计算中位数 - sqlite
- android - 从表中获取数据时出现房间错误 - java.lang.NoSuchMethodError: 没有静态方法 createCancellationSignal()
- javascript - 获取检测到的对象的坐标/位置。谷歌可教机器
- java - 是否可以在 android (java) 中以编程方式发送彩信?
- php - Flatsome 和 Angelleye
- javascript - 使用纯 Javascript 将变量放入表单
- php - 如何关联来自不同控制器的多个表单?
- c++ - 为什么子类可以将左值转换为右值?在 C++ 中完美转发
- java - 在我的错误中“赋值的左侧必须是变量”是什么意思?
- python - Python pydantic 模型以字符串形式获取字段