Как использовать скобки в laravel построителе запросов в предложении 'where'? - PullRequest
0 голосов
/ 16 апреля 2020

Я новичок в laravel, и у меня проблемы с его конструктором запросов. Я запускаю этот код

return DB::table('t_chat')
    ->where('chat_msg_from', '=', auth()->user()->id)
    ->where('chat_msg_to', '=', $to_id)
    ->orWhere('chat_msg_from', '=', $to_id)
    ->where('chat_msg_to', '=', auth()->user()->id)
    ->get();

этот код будет выполнять запрос как:

SELECT * FROM t_chat WHERE chat_msg_to = 2 AND chat_msg_from = 1 
OR
chat_msg_to = 1 AND chat_msg_from = 2

Но я хочу, чтобы он был похож:

SELECT * FROM t_chat WHERE (chat_msg_to = 2 AND chat_msg_from = 1) 
OR
(chat_msg_to = 1 AND chat_msg_from = 2)

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Таким образом, вы можете добавить условия в запрос:

return DB::table('t_chat')
->where('chat_msg_from', '=', auth()->user()->id)
->where('chat_msg_to', '=', $to_id)
->orWhere(function($q) {
     $q->where('chat_msg_from', '=', $to_id)
       ->Where('chat_msg_to', '=', auth()->user()->id);
     })
->get();
0 голосов
/ 16 апреля 2020

вы можете использовать whereRaw в laravel запросах:

return DB::table('t_chat')->whereRaw("(chat_msg_from=auth()->user()->id 
   and chat_msg_to=$to_id) or (chat_msg_from=$to_id and chat_msg_to =
    auth()->user()->id)")->get();
0 голосов
/ 16 апреля 2020

Улов:

DB::table('t_chat')
    ->where(function ($query) {
        $query->where('chat_mgs_to', '=', 2)
        ->Where('chat_mgs_from', '=', 1);
    })
    ->orWhere(function ($query) {
        $query->where('chat_mgs_to', '=', 1)
        ->Where('chat_mgs_from', '=', 2);
    })
    ->get();
...