Мне нужно использовать такое условие, как array is not in array. У меня есть массив, в котором есть два элемента для поиска. Например
(3,1) НЕ В ((2,3), (1,3), (1,32))
он работает как SQL-запрос в phpmyadmin. Но не сработал как доктринальный запрос.
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('FangoUserBundle:User')
->createQueryBuilder('user')
->leftJoin('user.collabInvitationTarget', 'invite')
->where('(:currentUserId, user.id) NOT IN (:inviteArr)')
->setParameter('currentUserId', $this->getUser()->getId())
->setParameter('inviteArr', $invites, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
Возникло исключение во время рендеринга шаблона («[Синтаксическая ошибка] строка 0, столбец 304: Ошибка: Expected Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS, got ‘,’») в FangoCollabaignBundle: Default : index.html.twig в строке 54.
Любой совет ?
Думаю проблема исходит от вашего ГДЕ. Чего именно вы ждете от этого состояния? — person Mehmet Soylu schedule 13.05.2018
(array) [currentUserId, user.id]
не должно в (array) [:inviteArr]
— person Mehmet Soylu schedule 13.05.2018
Возможно, это не окончательный ответ, но здесь есть несколько вещей, которые нужно исправить.
Хотя это допускается в базовом SQL, запрос должен быть заключен в двойные кавычки, а строка должна быть заключена в простые кавычки. Не наоборот.
Из вашего кода я предполагаю, что ваш пользовательский запрос находится в контроллере. Лучше всего переместить его в репозиторий сущностей с новой функцией, а затем вызвать эту функцию в вашем контроллере.
Странно, что вы не получаете сообщение об ошибке для
createQueryBuilder()
, поскольку он не существует в этом контексте .Избегайте использования псевдонимов, которые могут быть ошибочно приняты за имена объектов.
Я думаю, ваш запрос неверен в отношении
where()
.С учетом того, что вы применили пункт 2, я бы попытался сделать это так.
Вы заметите, что я использую
User::class
.Обязательно импортируйте его в свой репозиторий, добавив эту строку:
use FangoUserBundle\Entity\User;
(в вашем случае может отличатьсяuse
)Это то, что я сделал бы на основе вашего кода. Сообщите нам, решило ли это вашу проблему.
Нет, это не верное решение, но спасибо за потраченное время, и вы дали мне идею. Я сделал хитрость для массива поиска и массива стога сена. Я объединяю элемент с подчеркиванием вроде 3_2 и (3_1, 4_2) и ищу только один элемент. На данный момент это работает. — person Mehmet Soylu; 13.05.2018