Мне нужно найти эти строки из mysql, которые имеют уникальное поле test
. Я пытался добавить virtualFields, чтобы получить кол test
я сгруппированный по test
полю и проверить, что тест должен быть равен 1.Виртуальные поля и использование HAVING в CakePHP
Ниже мой код ... это дает ошибку: 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)');'. Прочтите документацию здесь: [Виртуальные поля] (http://book.cakephp.org/2.0/ru/models/virtual-fields.html). Тем не менее, использовать его как условие «HAVING» немного сложно в CakePHP, оно должно быть добавлено к предложению «GROUP BY». см. ключ «группа» в ответе, предоставленном @icebreaker. – thaJeztah