想象一下这个简单的查询。
User::with(['company' => function ($query) use($request) {
$query->where('companies.name', 'like', '%'.$request->name.'%');
}])->get();
如果指定的公司不存在,这可能会返回类似于以下集合的内容。
"data": [
{
"id": 1,
"company": null
}
],
即使公司值为 null
,查询也会运行并返回一个集合。问题是在这种情况下我不想返回记录。我只想要“公司”不为空的记录。
如何在我的查询中实现它?
最佳答案
使用 ->with(["company"=> function(){ ... }])
不会根据逻辑过滤父 User
查询,它只是限制了 company
关系中返回的内容。限制AND过滤需要->whereHas()
与->with()
结合使用:
User::with(["company"])->whereHas("company", function($query) use($request){
$query->where("companies.name", "like", "%".$request->name."%");
})->get();
在某些情况下,您可能需要将 ->whereHas()
中的逻辑复制到 ->with()
中的函数,但是由于您限制了基于关系的查询结果,您不必这样做。
关于php - 如果记录存在,Laravel with() 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132753/