Laravel/Eloquent/DB 查询 - 当为 null 和非 null 时加入

Chr*_*her 1 php mysql join laravel eloquent

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

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();
Run Code Online (Sandbox Code Playgroud)

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

STL*_*key 5

我认为您要求使用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()
Run Code Online (Sandbox Code Playgroud)