2015-02-06 29 views
1

我使用的Kohana查詢生成器,並試圖採取以下行動:的Kohana 3.加入使用多個條件或

$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) 

但如何武力使用OR代替AND的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 #compile)似乎有'AND'硬編碼。所以你要麼寫/找到你自己的Query_Builder,要麼根本不用,我想 – kero 2015-02-08 10:53:49

回答

1

由於Konaha源代碼的所有on()方法串連與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 2015-02-19 15:01:16