QueryBuilder:在包含逗号分隔的整数的列中搜索值

时间:2018-08-25 13:35:23

标签: doctrine-orm

我有一列tags,其中包含用逗号分隔的列表中的ID。 我想搜索该列中给定值的所有行。

说我有两行,其中列tags看起来像这样:

Row1: 1,2,3,4
Row2: 2,5,3,12

,我想搜索该列包含1的行。我尝试这样做:

$qb = $this->createQueryBuilder('p')
      ->where(':value IN (p.tags))
      ->setParameter('value', 1);

我希望它会做类似的事情

SELECT p.* FROM mytable AS p WHERE 1 IN (p.tags)

在MySQL中直接执行此操作即可完美运行。在“学说”中,它不起作用:

Error: Expected Literal, got 'p'

虽然它反过来起作用,但这不是我所需要的:

->where("p.tags IN :value")

我已经做了很多工作来使它起作用,但是不会...有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为您应该针对每种情况使用 Like 功能,例如:

        $q = "1";

        $qb = $this->createQueryBuilder('p')
        ->andWhere(
            $this->expr()->orX(
                $this->expr()->like('p.tags', $this->expr()->literal($q.',%')),  // Start with...
                $this->expr()->like('p.tags', $this->expr()->literal('%,'.$q.',%')), // In the middle...
                $this->expr()->like('p.tags', $this->expr()->literal('%,'.$q)),  // End with...
                ),
        );

查看SQL语句结果in this fiddle

希望获得帮助