2012-01-05 64 views
8

是否可以將和_where/or_where/or_like ...語句放在一起以免與其他語句和/ where語句混合使用。Codeigniter Active Record'where_or'分組

東西會導致

WHERE城市= '我的城市' 和國家= '我的狀態' AND(名稱LIKE%名稱1% 或名稱LIKE%名2%)

回答

11

是。 $this->db->where()允許您手動編寫子句。您可以這樣做:

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->where('(name LIKE %name1% OR name LIKE %name2%)', null, false); 

將第三個參數設置爲false可防止CodeIgniter嘗試向子句中添加反引號。

退房的Active Record documentation。區段標題$這 - > DB->其中();解釋了你可以用它來設置WHERE子句的四種方法。

+0

太棒了,我錯過了第三個參數 – kilrizzy 2012-01-05 19:27:47

13

我知道這是有點晚了,但我發現這個職位尋找到它的時候,發現不是由肖恩提出了一個更好的解決方案。

$name = 'Bob'; 

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->group_start(); 
    $this->db->like('name', $name); 
    $this->db->or_like('name', $name); 
$this->db->group_end(); 
+3

此解決方案適用於Codeigniter 3+,但不適用於Codeigniter 2 – semsem 2016-01-19 09:35:29

0

這兩個函數group_start()group_end()已經在已經實現笨3.0.3。根據原始問題,這裏的實施情況稍微好一些。

$name1 = 'Bob'; 
$name2 = 'John'; 

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->group_start(); 
$this->db->like('name', $name1); 
$this->db->or_like(('name', $name2); 
$this->db->group_end();