繁体   English   中英

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

[英]Laravel with() relationship if record exists

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

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()但因为你是限制基于关系的查询结果,你不应该。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM