У меня есть класс Task с categories
array of integers property
class Task{ /** * @var array * * @ORM\Column(name="categories", type="array", nullable=true) */ private $categories; }
теперь в контроллере я пытаюсь создать запрос, который будет проверять, является ли переменная category id
categories
массиве categories
задачи
$qb = $this->getDoctrine()->getRepository('CoreBundle:Task')->createQueryBuilder('t'); $qb->where(':category IN (t.categories)') ->setParameter('category', $category);
Это дает мне ошибку:
[Syntax Error] line 0, col 140: Error: Expected Literal, got "t";
Насколько мне известно, это невозможно в Doctrine напрямую, поскольку массив не является технически массивом до тех пор, пока он не будет удален из базы данных.
Единственный способ, которым я знаю, чтобы получить результат, который вы ищете, – это обработать значение своей базы данных в виде строки и найти нужную строку в этом значении, используя символы с подстановочными знаками.
$qb = $this->getDoctrine()->getRepository('CoreBundle:Task')->createQueryBuilder('t'); $qb->where('t.categories LIKE :category') ->setParameter('category', '%'.$category.'%');