Что эквивалентно этому MySQL-запросу Laravel Query Builder? - PullRequest
0 голосов
/ 03 июня 2018

Это мой запрос от MySQL.Я хочу использовать «LEFT JOIN» для двух одинаковых таблиц с разными псевдонимами и иметь «ON» с «AND» в скобках.И этот запрос приходит с правильными результатами, но моя проблема в том, как мне узнать эквивалент этого запроса к его запросу Laravel?

SELECT * FROM table1 AS a 
LEFT JOIN table1 AS b 
ON (a.column1 = b.column1 AND a.column2 < b.column2)
WHERE b.column2 is null;

И затем я использую этот запрос в Laravel Query Builder, который будет запрашиватьнеправильные результаты.

DB::table('table1 As a')
->leftJoin('table1 As b', 'a.column1', '=', 'b.column1')
->leftJoin('table2 As c','a.column2', '<', 'c.column2')
->whereNull('c.column2')
->get();

Этот запрос Laravel эквивалентен этому запросу MySQL, который, к сожалению, будет запрашивать такие же неправильные результаты:

SELECT * FROM table1 AS a 
LEFT JOIN table1 AS b 
ON (a.column1 = b.column1 AND )
LEFT JOIN table1 AS c
ON (a.column2 < c.column2)
WHERE b.column2 is null;

1 Ответ

0 голосов
/ 03 июня 2018

Вам нужно передать функцию в leftJoin() Примерно так ...

DB::table('table1 as a')
    ->leftJoin('table1 as b', function($join) {
        return $join->on('a.column1', '=', 'b.column1')
            ->whereColumn('a.column2', '<', 'b.column2');
    })->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...