首页 > 解决方案 > 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相关联的Bars 。我该怎么做呢?我试过了:baz_id1

Foo::where('bar', function($query) {
    $query->fromBaz(1);
});

但这会产生错误

调用未定义的方法 Illuminate\Database\Query\Builder::fromBaz()

标签: phplaraveleloquent

解决方案


当您向关系添加条件时,您必须使用 whereHas。

查询应该是

Foo::whereHas('Bar', function ($query) {
    $query->fromBaz(1);
})->get();

请参阅:https ://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence

我还在您的另一段代码中发现了一些东西,您没有在 Foo 模型中的 Bar 函数上添加返回值。


推荐阅读