Laravel Eloquent在相关模型上按范围获取模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent在相关模型上按范围获取模型相关的知识,希望对你有一定的参考价值。

我有一个雄辩的模型Foo有一个字段bar_id。我在Foo模型中定义它们之间的关系:

public function Bar()
{
    $this->belongsTo('AppBar');
}

Bar模型有一个baz_id,并且范围可以得到所有具有特定Barbaz_ids。这是我的Bar模型的范围:

public function scopeFromBaz($query, $bazId)
{
    return $query->where('baz_id', $bazId)
}

我现在想打电话给所有Foos,他们的相关Barbaz_id1。我该怎么做呢?我试过了:

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函数的回报。

以上是关于Laravel Eloquent在相关模型上按范围获取模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel Eloquent 上过滤相关模型

Laravel Eloquent - 如何将范围查询内的计算值作为模型列或集合属性返回

Laravel Eloquent:如何排序相关模型的结果?

Laravel Eloquent - 从相关模型中检索特定列

Laravel count Eloquent belongsToMany 相关模型

相关模型 eloquent laravel 中的自定义查询