Laravel/Eloquent/DB 查询 - 当为空且不为空时加入

Posted

技术标签:

【中文标题】Laravel/Eloquent/DB 查询 - 当为空且不为空时加入【英文标题】:Laravel/Eloquent/DB Query - Join when is null and not null 【发布时间】:2015-07-07 16:10:57 【问题描述】:

我正在尝试这段代码但没有成功:

MyModel::join('countries', 'countries.id', '=', 'messages.from_country_id')
         ->join('users', 'users.id', '=', 'messages.user_id')
         ->where('messages.id', '=', $id)
         ->select('users.name', 'messages.from_name', 'messages.from_email', 'messages.content', 'countries.code AS c_code', 'countries.name AS c_name')->firstOrFail();

但在某些情况下,messages.user_id 为空。我想要的是检索所有消息,每个message 都带有正确的users.name(当它可用时)。

【问题讨论】:

【参考方案1】:

我认为您要的是left join,它将获取所有消息以及拥有它的用户的用户名:

MyModel::join('countries', 'countries.id', '=', 'messages.from_country_id')
     ->leftJoin('users', 'users.id', '=', 'messages.user_id')
     ->where('messages.id', '=', $id)
     ->select('users.name', 'messages.from_name', 'messages.from_email', 'messages.content', 'countries.code AS c_code', 'countries.name AS c_name')->firstOrFail()

【讨论】:

最佳答案!即使消息为空,记录也会返回。谢谢。

以上是关于Laravel/Eloquent/DB 查询 - 当为空且不为空时加入的主要内容,如果未能解决你的问题,请参考以下文章

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

Mysql查询详解(条件查询、子查询、模糊查询、连接查询。。。)

嵌套查询与连接查询的区别是啥

数据库查询: 列出表的所有字段,“*”符号,查询指定字段数据,DISTINCT查询,IN查询,BETWEEN AND查询,LIKE模糊查询,对查询结果排序,分组查询,统计分组查询

MySQL查询(简单查询,条件查询,排序查询)

高级查询(嵌套查询)和(相关子查询)