我在使用 CakePHP 1.3 查找信息时遇到了一个奇怪的问题。让我们以这个 dbschema 为例:
id 是 int(11) PRIMARY auto_increment 数量是 float(10,2) NULL 状态是 ENUM(Completed, Removed, Pending)
id amount status
1 100.00 Completed
2 100.00 Removed
3 100.00 Completed
4 100.00 Completed
5 100.00 Pending
当使用 Cake'sfind
从这个表中检索数据时,我使用这个查询:
$this->Testtable->find('all', array(
'conditions' => array(
'status LIKE ' => 'Removed',
'status LIKE ' => 'Pending',
'status LIKE ' => 'Completed'
)
))
查看这个查询,我假设Cake 会返回匹配所有这些条件的所有行(这在 SQL 中是完全可以接受的),但是它只使用最后一个条件并返回WHERE status LIKE 'Completed'
。
我运行了一个测试,它正确返回了所有行(我知道无论如何这是一种更“正确”的查询方式):
'conditions' => array(
'status' => array('Removed', 'Pending', 'Completed')
)
以相反的例子为例,我想返回所有未删除或待处理的行:
'conditions' => array(
'status !=' => 'Removed',
'status !=' => 'Pending'
)
此查询返回所有带有 Completed和Removed 的行,因为它只侦听最后一条语句。我认为发生这种情况是因为 Cake 没有将这些搜索条件连接到查询中,而是覆盖了基于“字段”的条件status !=
。我可以通过在其中任何一种情况下添加一个空格来证明这一理论!=
,从而仅创建已确认记录的所需结果。
谁能告诉我为什么蛋糕会这样做?由于这是在 SQL 中做的合法事情,我认为 Cake 没有理由不允许你这样做。有人知道这个问题是否在较新版本的 Cake 中得到解决?