我正试图了解CakePHP的复杂查找条件并阅读the docs,但我正在努力解决这一问题。
SELECT field1,
field2
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'))
为了产生上述条件,我的conditions
数组会是什么样的?
答案 0 :(得分:16)
虽然问题中的条件并不复杂,但它们触及几个点,这意味着正确定义它们可能很棘手。定义cakephp条件时需要了解的一些事项:
"AND" => ...
考虑到上述说明,问题中的条件可表示为:
$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中的空格不一致。
答案 1 :(得分:3)
好的,我已经解决了它:
$findParams['conditions'] = array(
'Account.client_id' => '12345',
'AND' => array(
'OR' => array(
'Holding.holding_date' => '2013-09-15',
'AND' => array(
'Holding.holding_date = LAST_DAY(Holding.holding_date)',
'MONTH(Holding.holding_date)' => array(3,6,9,12)
)
)
)
);
答案 2 :(得分:0)
试试这个:
$params['conditions'] = array(
'`id`' => 123456,
'AND' => array(
'`holding_date`' => 'LAST_DAY(`holding_date`)',
'AND' => array(
'MONTH(holding_date)' => array(3, 6, 9, 12),
'OR' => array(`holding_date` => '2013-09-15')
)
)
);