Конструктор запросов базы данных Kohana с JOIN & ON & AND

Я работаю над запросом, который использует COALESCE для получения локализованных строк для моего текущего проекта.

SQL работает при использовании в качестве необработанного запроса, но я не могу структурировать соединения таким образом с помощью построителя запросов.

LEFT JOIN text as text_se
ON (main_table.text = text_se.id)
AND (text_se.lang_code = 'SV')

Этот код:

->join(array('text', 'text_se', 'LEFT')
    ->on('main_table.text', '=', 'text_se.id')
    ->on('text_se.lang_code', '=', 'SV')

Только результаты в

LEFT JOIN text as text_se
ON (main_table.text = text_se.id AND text_se.lang_code = 'SV')

Что не делает то же самое... Кто-нибудь еще использовал AND после оператора JOIN и может мне помочь?


person Johan Tell    schedule 10.05.2012    source источник
comment
Можете ли вы опубликовать полный необработанный запрос?   -  person badsyntax    schedule 10.05.2012


Ответы (3)


Или вы могли бы сделать это ....

->join(array('text', 'text_se'), 'LEFT')
    ->on('main_table.text', '=', DB::Expr('text_se.id AND text_se.lang_code = "SV"'))
person pogeybait    schedule 11.05.2012

Почему бы не использовать где:

->join(array('text', 'text_se', 'LEFT')
->on('main_table.text', '=', 'text_se.id')
->where('text_se.lang_code', '=', 'SV')
person matino    schedule 10.05.2012
comment
Это может работать в данном случае, но параметр where повлияет только на предложение where. В некоторых случаях желательно объединять таблицы по нескольким условиям для дальнейшей оптимизации запросов. - person Mike Purcell; 30.12.2014
comment
в этом случае LEFT JOIN будет действовать как INNER JOIN - person Kalim; 27.07.2015

Кажется, это работает в 3.1.x:

->join(array('text', 'text_se', 'LEFT')
->on('main_table.text', '=', DB::expr('text_se.id'))
->on('text_se.lang_code', '=', DB::expr('SV'))
person Mike Purcell    schedule 30.12.2014