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

标签 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,查询也会运行并返回一个集合。问题是在这种情况下我不想返回记录。我只想要“公司”不为空的记录。

如何在我的查询中实现它?

最佳答案

使用 ->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/

相关文章:

php - 在 csv 中查找字符串并添加到每一行

mysql - SQL : SELECT binary value

mysql - 按字母排序并忽略括号

python - 当键/值的顺序不同时,如何将 Python 字典写入 CSV?

PHP Artisan Tinker 从任何命令崩溃

php - Yii:从一个表单中保存多个模型并检查现有记录

php - WAMP 错误 - #1045 无法登录 MySQL 服务器

php - 使用php中的位置 header 留在同一页面

php - 在 Laravel 中从 Controller 访问模型的最佳实践

php - Laravel 5.4 查询生成器使用 groupBy 实现 orderBy