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

问题描述 投票:0回答:1

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

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

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()

php laravel eloquent
1个回答
1
投票

当你为关系添加条件时,你必须使用whereHas。

查询应该是

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

见:https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence

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

© www.soinside.com 2019 - 2024. All rights reserved.