Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

jimb814's avatar

Translating SQL into Query Builder syntax

I am struggling to grasp how to write these kinds of queries in Laravel.

This works fine:

SELECT * 
FROM `messages` 
JOIN `conversations`
ON messages.conversation_id = conversations.id
WHERE sent_to = 6 AND created_by = 3
OR 
created_by = 6 AND sent_to = 3;

This returns nothing:

public function getConversationBetween($user_id, $auth_id)
{
     return DB::table('conversations')
         ->join('messages', 'messages.conversation_id', '=', 'conversations.id')
         ->where(function($query) use ($auth_id, $user_id) { 
             $query->where('messages.sent_to', $auth_id)->orWhere('messages.created_by', $user_id);
         })
         ->where(function ($query) use ($user_id, $auth_id) {
             $query->where('messages.created_by', $auth_id)->orWhere('messages.sent_to', $user_id);
         })  
         ->get(); 
}

I would really appreciate understanding the correct way to write this query for Laravel. Any assistance is appreciated!

0 likes
2 replies
MichalOravec's avatar
Level 75

This should work

return DB::table('messages')
    ->join('conversations', 'messages.conversation_id', '=', 'conversations.id')
    ->where(function($query) use ($auth_id, $user_id) {
        $query->where('messages.sent_to', $auth_id)->where('messages.created_by', $user_id);
    })->orWhere(function($query) use ($auth_id, $user_id) {
        $query->where('messages.created_by', $auth_id)->where('messages.sent_to', $user_id);
    })->get();

Please or to participate in this conversation.