MySql Doctrine:查找给定变量是否为IN数组属性

时间:2016-08-30 13:53:16

标签: php mysql arrays symfony doctrine-orm

我有一个带有categories整数属性数组的类Task

class Task{
      /**
       * @var array
       *
       * @ORM\Column(name="categories", type="array", nullable=true)
       */
private $categories;
 }

现在在控制器中我正在尝试构建查询,该查询将检查category id变量是否在任务的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";

1 个答案:

答案 0 :(得分:3)

据我所知,直接在Doctrine中这是不可能的,因为在数组从数据库中反序列化之前,数组在技术上并不是一个数组。

我知道获得您正在寻找的结果的唯一方法是将数据库值视为字符串,并使用带有通配符的like在该值中搜索所需的字符串。

$qb = $this->getDoctrine()->getRepository('CoreBundle:Task')->createQueryBuilder('t');
$qb->where('t.categories LIKE :category')
   ->setParameter('category', '%'.$category.'%');