如果记录存在,则Laravel with()关系

时间:2019-01-10 16:13:29

标签: php mysql laravel eloquent

想象一下这个简单的查询。

User::with(['company' => function ($query) use($request) {
      $query->where('companies.name', 'like', '%'.$request->name.'%');
}])->get();

如果指定的公司不存在,这可能会返回类似于以下集合的内容。

"data": [
        {
            "id": 1,
            "company": null
        }
    ],

查询将运行并返回一个集合,即使公司值为null。问题是在这种情况下我不希望返回记录。我只想要“公司”不为空的记录。

如何在查询中实现呢?

1 个答案:

答案 0 :(得分:2)

使用->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()中的函数,但是由于您是基于关系来限制查询结果,因此您不必