我有一个名为消息的表,它的列是
id, sender_id, message, receiver_id, created_at, updated_at
另一个表名为用户,其列为
id, firstname, lastname, email, password, created_at,updated_at
我想获取所有用户的所有消息,因此我将使用users.id加入 messages.sender_id和messages.receiver_id
但是我不知道如何在加入laravel时使用“OR”运算符 这是我的原始查询,它为我提供了所需的输出。
SELECT messages.*,users.* FROM messages JOIN users ON users.id = messages.sender_id
OR users.id = messages.receiver_id GROUP BY messages.id
这是我试过的laravel查询
$get_messages = DB::table('messages')
->where('messages.sender_id',$user_id)
->leftjoin('users', function($join){
$join->on('users.id','=','messages.sender_id'); // i want to join the users table with either of these columns
$join->on('users.id','=','messages.receiver_id');
})
->orwhere('messages.sender_id',$partner_id)
->where('messages.receiver_id',$user_id)
->orwhere('messages.receiver_id',$partner_id)
->groupby('messages.id')
->get();
print_r($get_messages);
答案 0 :(得分:12)
试试这个。
->leftjoin('users', function($join){
$join->on('users.id','=','messages.sender_id'); // i want to join the users table with either of these columns
$join->orOn('users.id','=','messages.receiver_id');
})
答案 1 :(得分:0)
你也可以使用直接查询
$results = DB::select( DB::raw("SELECT messages.*,users.* FROM messages JOIN users ON users.id = messages.sender_id
OR users.id = messages.receiver_id GROUP BY messages.id") );