Нужна помощь, чтобы преобразовать SQL-запрос в Laravel Eloquent - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть этот запрос SQL:

SELECT * FROM `user` WHERE `id` IN(
    SELECT  DISTINCT if(`sender_id`='2',`receiver_id` ,`sender_id`) AS `id`
    FROM    `message`
    WHERE   (`receiver_id`  = '2' OR `sender_id` = '2')
    )

Мне нужно конвертировать в Laravel eloquent.Проблема в том, что я не знаю, как преобразовать функцию IF.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018
User::whereIn('id', Message::distinct()->select(DB::raw('if(sender_id=2, receiver_id, sender_id) as id'))->where( 
            function( $query ) {
                $query
                ->where('receiver_id', 2)
                ->orWhere('sender_id', '2');
            }
        ))->toSql();

чтобы использовать условие if в выражении sql, вы можете использовать DB :: raw method:)

0 голосов
/ 11 декабря 2018
$subquery = DB::table('message')
    ->selectRaw("if(sender_id = ?, receiver_id, sender_id) AS id")
    ->distinct()
    ->where(function($query){
        $query
            ->where('receiver_id', '?')
            ->orWhere('sender_id', '?');
    })
    ->toSql();

$query = DB::table('user')
    ->whereRaw('id IN (' . $subquery . ')', [2, 2, 2])
    ->get();

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...