php - Laravel Eloquent 通过关联模型的范围获取模型
问题描述
我有一个 Eloquent 模型Foo
,它有一个 field bar_id
。我在模型中定义了它们之间的关系Foo
:
public function Bar()
{
$this->belongsTo('App\Bar');
}
该Bar
模型有一个baz_id
, 和一个范围来获取所有Bar
具有特定baz_id
. 这是我的Bar
模型中的范围:
public function scopeFromBaz($query, $bazId)
{
return $query->where('baz_id', $bazId)
}
我现在想调用所有Foo
相关联的Bar
s 。我该怎么做呢?我试过了:baz_id
1
Foo::where('bar', function($query) {
$query->fromBaz(1);
});
但这会产生错误
调用未定义的方法 Illuminate\Database\Query\Builder::fromBaz()
解决方案
当您向关系添加条件时,您必须使用 whereHas。
查询应该是
Foo::whereHas('Bar', function ($query) {
$query->fromBaz(1);
})->get();
请参阅:https ://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence
我还在您的另一段代码中发现了一些东西,您没有在 Foo 模型中的 Bar 函数上添加返回值。
推荐阅读
- java - javafx vbox 和 gridpane
- javascript - javascript - Uncaught (in promise) TypeError: e.iterator is not a function。如何解决此类错误?
- angular - 由于地理围栏插件,Ionic 构建失败
- oracle - 如何从不同模式的触发器调用另一个模式的过程
- javascript - 使用 angular 8 生成 pwa 到 apk 或 ios
- swift - Combine 如何知道 ObservableObject 实际发生了变化
- flutter - 带有“:”的命名构造函数
- tizen - 蒂岑。如何更新页面内容 CircleScrollView 的子项
- postgresql - 如何在不使用 ORM 的情况下将 Nestjs 应用程序连接到 postgreSQL?
- angular - 如何按日期将数组排序为角度?