Laravel查询构建器 - 如何按关联字段进行过滤

3
为了举例说明,假设我有以下内容,其中为每个人都设置了一个帽子的关系。
$people = People::join('hat')->get();

如何筛选出帽子是红色的人?

我尝试了以下方法:

$people = People::join('hat')
    ->where('hat.colour', 'red')
    ->get();    

...但目前为止没有运气。

干杯


“Hat”是一个模型吗?“People”与“Hat”有关系吗?如果有,您可以使用->whereHas()进行过滤。如果可以的话,请展示您的模型。 - Tim Lewis
1个回答

8
使用 whereHas() 方法:
$people = People::whereHas('hat', function($query) {
    $query->where('colour', 'red');
})->get(); 

嗨,谢谢,这很有帮助。但是我不明白一些东西...当我像Laravel文档一样使用它,并在$query之前输入Builder时,它不起作用,查询仍然是父级而不是子级。你知道这种行为吗?这里是来自文档的示例链接:https://laravel.com/docs/5.8/eloquent-relationships#querying-relationship-existence - Pooria Honarmand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接