2010-06-12 30 views
6

我試圖運行通過ORM這樣的查詢條件:Kohana的3 ORM - 分組,其中用括號

SELECT * from table where (fname like 'string%' or lname like 'string%') 
AND (fname like 'string2%' or lname like 'string2%'); 

這是我到目前爲止有:

$results = ORM::factory('profiles'); 
foreach ($strings as $string) { 
    $result->where('fname', 'like', "$string%"); 
    $result->or_where('lname', 'like', "$string%"); 
} 

但是這並未沒有考慮括號。有任何想法嗎?

回答

8

找到了答案。

它完成了Kohana的where_open()和where_close()方法。

+0

對不起DexterW,我無意中downvoted你的答案,現在,它不會讓我撤消downvote ... – 2011-06-21 04:49:42

0

無法獲取的代碼格式在註釋工作 - 只是覺得我一個簡單的例子增加的情況下,任何人的答案都會碰到它:

$query = DB::select() 
      ->from('some_table') 
      ->where_open() 
      ->where('column_one', '=', 1) 
      ->or_where('column_two', '=', 2) 
      ->where_close(); 

會生成以下SQL:

SELECT * FROM some_table 
WHERE (column_one = 1 OR column_two = 2); 
7

它適用於我。

ORM代碼示例

$musicslist = ORM::factory('user_music') 
      ->where_open() 
      ->where('title', 'like', '%' . $search . '%') 
      ->or_where('album', 'like', '%' . $search . '%') 
      ->or_where('artist', 'like', '%' . $search . '%') 
      ->where_close() 
      ->and_where('app_userid','=', $userid) 
      ->find_all(); 

它會創建SQL查詢

SELECT `user_musics`.* FROM `user_musics` WHERE (`title` LIKE '%as%' OR `album` LIKE '%as%' OR `artist` LIKE '%as%') AND `app_userid` = '21'