2015-03-25 2 views
1

Мне нужно следующее выражение sql для перевода на Laravel Rloquent. попробовал несколько способов и буквально провалился.Каков наилучший способ сделать этот SQL-запрос как выражение Elequent

SELECT * FROM `conversations` where `type` = 'open' 
AND `sender_id`=2 AND ((`deleted_by_sender` IS NULL) 
AND (`deleted_by_sender` IS NULL OR `deleted_by_receiver` IS NULL )) 
OR `receiver_id` = 2 AND ((`deleted_by_sender` IS NULL) 
AND (`deleted_by_sender` IS NULL OR `deleted_by_receiver` IS NULL )) 

Заранее спасибо.

ответ

1

вы можете выполнить вы запрашиваете в красноречивым таким образом, я предположил, что вы есть модель под названием Разговор

Conversation::where('type', 'open') 
->where('sender_id', 2) 
->whereNull('deleted_by_sender') 
->where(function ($query) { 
    return $query->whereNull('deleted_by_sender') 
     ->orWhereNull('deleted_by_receiver'); 
})->orWhere('receiver_id', 2) 
->whereNull('deleted_by_sender') 
->where(function ($query) { 
    return $query->whereNull('deleted_by_sender') 
     ->orWhereNull('deleted_by_receiver'); 
})->get(); 

эти коды непроверенный, переведенный прямо из вашего запроса sql

0

Если я понимаю правильно, вы ожидали этого:

SELECT * FROM `conversations` 
WHERE `type` = 'open' 
    AND (`deleted_by_sender` IS NULL OR `deleted_by_receiver` IS NULL) 
    AND ((`sender_id`=2 AND `deleted_by_sender` IS NULL) 
     OR 
     (`receiver_id` = 2 AND `deleted_by_receiver` IS NULL) 
     ) 
Смежные вопросы