Laravel/Eloquent/DB 查询 - 在为 null 和不为 null 时加入
Laravel/Eloquent/DB Query - Join when is null and not null
我正在尝试此代码但没有成功:
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
(当它可用时)。
我认为您要的是 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()
我正在尝试此代码但没有成功:
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
(当它可用时)。
我认为您要的是 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()