2017-02-22 25 views
0

В двух словах я пытаюсь сделать соединение более чем с одним условием. Мы используем устаревший Laravel 4, и фактический класс, который я отслеживал, это Illuminate\Database\Query\Builder. Вот что я добавляю:Laravel 4 не может присоединиться к нескольким условиям, используя -> on() более одного раза

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 

Он отлично работает с первым $join->on() вызовом, но страница не работает, если второй on называется. почему это и каков правильный способ сделать это в Laravel 4?

ответ

0

Попробуйте

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id') 
    ->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 
+0

Нет, это также приводит к сбою (завершение с пересылкой) –

+0

Это может быть второе соединение '' visible_for_categories.name ',' = ',' visible_for_categories'' не так? Вы имели в виду ''visible_for_categories.name', '=', 'nv2.name''? или что-то типа того? – Nerea

0

Путь, который работал для меня на вышеупомянутый вопрос заключается в следующем:

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', DB::raw("'visible_for_categories'")); 
}) 

Построитель запросов будет принимать все три значения в функции on() являются поля, а не строки , а также будет обрабатывать период ..

Общее предположение состоит в том, что JOINS будет связывать реляционное поле для создания структуры, а условия WHERE предоставят требуемый фильтр. Однако любой, кто работал, особенно. с LEFT или RIGHT соединения знают, что это не всегда возможно.

Будьте осторожны с SQL-инъекцией, используя DB::raw, но в этом случае таблицу EAV мы имеем дело с фиксированной строкой, а не с переменной.

 Смежные вопросы

  • Нет связанных вопросов^_^