2010-06-21 63 views
1

我遇到一些問題越來越笨的活動記錄,產生這樣的查詢:如何編寫一個查詢中的CodeIgniter的Active Record

SELECT fruits.* FROM fruits 
WHERE fruits.color = 'red' 
AND (fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7); 

基本上我想有幾個或條款,但一個where子句是始終強制執行。

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 
$this->db->where('fruits.color', 'red'); 
$this->db->or_where('fruits.size', 'medium'); 
$this->db->or_where('fruits.name', 'kiwi'); 
$this->db->or_where('fruits.length', 7); 

可生產類似:

SELECT fruits.* FROM fruits WHERE fruits.color = 'red' OR fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7;

我需要強制執行,顏色是總是紅色。

有一個體面的方式來做到這一點?

回答

0

有沒有辦法實現這個正確使用CodeIgniter的活動記錄。

這不是太難看的唯一方法是使用自定義字符串其中()功能是這樣的:

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 
$where = "fruits.color = 'red' AND (fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7);"; 
$this->db->where($where); 

重要:請注意,使用自定義字符串,你變量將不會被轉義,因此,你需要使用$這個 - > DB->越獄()

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 

$color = 'red'; 
$size = 'medium'; 
$name = 'kiwi'; 
$length = 7; 
$where = "fruits.color = '".$this->db->escape($color)."' AND (fruits.size = '".$this->db->escape($size)."' OR fruits.name = '".$this->db->escape($name)."' OR fruits.length = '".$this->db->escape($length)."');"; 
$this->db->where($where); 

編輯:

我上了很好的查詢糊塗了,我糾正吧:)

+0

呀,這是我想通。不幸的是我的實際查詢有一堆的or_where_in而不僅僅是or_where ....所以,如果我建立一個自定義字符串,在那裏我還不如直接寫在原始SQL整個查詢在這一點上:/ 感謝您的輸入。 – Anon 2010-06-21 22:38:28

+0

這是CodeIgniter的一個缺點,尤其是現在我使用純粹的OOP Yii,我更加註意到它。 否則解決方案是創建自己的函數來處理這個問題,或者覆蓋db類。 – Weboide 2010-06-21 22:49:29

相關問題