CakePHP 条件和 sql 表达式
虽然问题中的条件并不复杂,但它们涉及一些要点,这意味着它们可能很难正确定义。定义 cakephp 条件时要知道的一些事情:
- 条件被定义为键 => 值对的数组,因此同一键不能在同一级别上定义两次
- 具有数字键的数组元素被解释为 sql 表达式
- 默认加入模式是“AND” - 不需要
"AND" => ...
在条件中指定
- OR 条件必须包含多个元素。如果它只有一个,则没有错误,否则:或者什么?
牢记上述说明,问题中的条件可以表示为:
$foo->find('all', array(
'fields' => array(
'field1',
'field2'
),
'conditions' => array(
'id' => 123456,
'OR' => array(
array(
'holding_date = LAST_DAY(holding_date)',
'MONTH(holding_date)' => array(3,6,9,12)
),
'holding_date' => '2013-09-15'
)
)
));
结果是:
WHERE
`id` = 123456
AND
(
(
(holding_date = LAST_DAY(holding_date))
AND
(MONTH(holding_date) IN (3, 6, 9, 12)))
)
OR
(`holding_date` = '2013-09-15')
)
注意:空格非常重要=)我最初误读了这个问题,仅仅是因为问题的 sql 中的空格不一致。