我無法在我的條件下使用SQL函數NOW()來使用任何查找操作。CakePHP - 如何在查找條件中使用SQL NOW()
我有效地試圖建立一個查找查詢,說:
期望中的SQL:
WHERE (NOW() BETWEEN Promotion.start AND Promotion.end) AND Promotion.active = 1
我已經嘗試了多種組合,但無論怎樣我現在使用的時候做的()中條件,它不起作用,因爲Cake建立的查詢會在模型字段周圍引用'
引號,所以它們被MySQL解釋爲一個字符串。
$this->find('all', array(
'conditions' => array(
'(NOW() BETWEEN ? AND ?)' => array('Promotion.start', 'Promotion.end'),
'Promotion.active' => 1
)
));
CakePHP中創建的SQL:
注意周圍的模型領域的單引號在()之間,因此它們被視爲字符串。
WHERE (NOW() BETWEEN 'Promotion.start' AND 'Promotion.end') AND `Promotion`.`active` = '1'
這也不起作用。
$this->find('all', array(
'conditions' => array(
'NOW() >=' => 'Promotion.start',
'NOW() <=' => 'Promotion.end',
'Promotion.active' => 1
)
));
我知道爲什麼這些解決方案不起作用。這是因爲如果模型字段是條件中的數組鍵,而不是數組值,則這些模型字段只能被視爲這樣。
我知道我能得到這個,如果我只是把整個BETWEEN()條件爲一個字符串工作:
$this->find('all', array(
'conditions' => array(
'NOW() BETWEEN Promotion.start AND Promotion.end',
'Promotion.active' => 1
)
));
但後來我沒有收到蛋糕的針對SQL注入保護的利益。
同樣的問題的另一個例子是,這是容易理解:
期望中的SQL:
WHERE Promotion.start > NOW() AND Promotion.active = 1
所以我試試這個:
$this->find('all', array(
'conditions' => array(
'Promotion.start >' => 'NOW()',
'Promotion.active' => 1
)
));
而且再次它不工作,因爲蛋糕放'
qu NOW()部分周圍的註釋。
CakePHP中創建的SQL:
WHERE `Promotion`.`start` > 'NOW()' AND `Promotion`.`active` = '1''
函數不使用索引是什麼意思? – BadHorsie
MySQL不支持基於函數的索引。當查詢包含函數(或表達式)時,它不能使用索引。它必須進行全表掃描。嘗試擴展解釋並查看它不使用的索引;-) – RichardAtHome