【发布时间】:2013-04-02 06:32:16
【问题描述】:
我需要从 mysql 中找到那些具有唯一 test 字段的行。我尝试添加 virtualFields 以获取 test 的计数,然后按 test 字段分组并检查 test 必须等于 1。
以下是我的代码...它给出了错误:Syntax error or access violation
public function index()
{
$this -> User -> virtualFields(array(
'countTest' => "COUNT(User.test)"
));
$users = $this -> User -> find('all', array(
'conditions' => array('countTest' => 1),
'group' => 'User.test'
));
pr($users); die;
}
我找到了解决问题的 MySql 查询:'SELECT test, COUNT(*) as count FROM users GROUP BY test HAVING COUNT(*) = 1';
你能把上面的查询转换成 CakePHP 格式吗?
【问题讨论】:
-
请注意,'virtualFields' 不是一个方法,它是模型的一个属性;要添加虚拟字段,请使用:
$this->User->virtualFields = array('countTest' => 'COUNT(User.test)');。在此处阅读文档:Virtual fields。然而,要将它用作HAVING条件在CakePHP 中有点棘手,它必须附加到'GROUP BY' 子句。请参阅@icebreaker 提供的答案中的“组”键。