2015-02-06 2 views
1

Я использую Kohana Query Builder и пытается выполнить следующие действия:Kohana 3. Соединение с множественным условием использования OR

$query 
->join(«t1», «INNER») 
->on(«t1.id»,»=»,»t2.parent_id») 
->on(«t1.id»,»=»,»t3.x_id») 

Это означает:

INNER JOIN t1 
ON(t1.id = t2.parent_id AND t1.id = t3.x_id) 

Но как сила использовать ИЛИ вместо от И методов объединения построителей запросов KO3?

INNER JOIN t1 
ON(t1.id = t2.parent_id OR t1.id = t3.x_id) 
+1

код [ '' Database_Query_Builder_Join'-х компиляции() 'метод] (http://kohanaframework.org/3.3/guide-api/Database_Query_Builder_Join # comppile), похоже, имеет 'AND' hardcoded. Так что вам либо нужно написать/найти свой собственный Query_Builder, либо не использовать его вообще, я думаю – kero

ответ

1

Благодаря Konaha исходному коду все on() методы concatinated с AND:

// Concat the conditions "... AND ..." 
$sql .= ' ON ('.implode(' AND ', $conditions).')'; 

Так у вас есть по крайней мере 2 способами:

  • Redifine Database_Query_Builder_Join методы для поддержки OR concatinator
  • (это обман) Использование DB::expr() в качестве третьего параметра on() метод, как:

    ->on('t1.id', '=', DB::expr('t2.parent_id OR t1.id = t3.x_id))

+0

DB :: expr() .. Почему я об этом не думал раньше? Большое спасибо! – LINKeRxUA