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

Doctrine orm QueryBuilder:在包含逗号分隔整数的列中搜索值,doctrine-orm,Doctrine Orm,我有一个列tags,在逗号分隔的列表中包含ID。 我想搜索列中有给定值的所有行 假设我有两行,其中列标记如下所示: Row1: 1,2,3,4 Row2: 2,5,3,12 我想搜索列中包含1的行。我试着这样做: $qb = $this->createQueryBuilder('p') ->where(':value IN (p.tags)) ->setParameter('value', 1); 我希望它能像这样 从mytable中选择p.*作为p

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

假设我有两行,其中列
标记
如下所示:

Row1: 1,2,3,4
Row2: 2,5,3,12
我想搜索列中包含
1
的行。我试着这样做:

$qb = $this->createQueryBuilder('p')
      ->where(':value IN (p.tags))
      ->setParameter('value', 1);
我希望它能像这样

从mytable中选择p.*作为p,其中1在(p.tags)

在MySQL中直接执行此操作非常有效。在理论上,它不起作用:

Error: Expected Literal, got 'p'
不过,它的工作原理正好相反,但这不是我需要的:

->其中(“p.tags IN:value”)


我已经尝试了很多让这工作,但它只是不会。。。有什么想法吗?

我认为您应该对每个场景使用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语句结果


希望此帮助

您能显示
标记
列的定义吗?在symfony中,它被定义为
@ORM\column(type=“simple\u array”)
,在数据库中,它是一个
长文本
字段,
utf8mb4\u unicode\u ci
排序规则。它只包含整数,用逗号分隔。没什么特别的。在搜索
1
时,这不也会匹配
11
21
132
?我只希望它返回1。我想这可以用正则表达式来完成,但我不认为这是一种性能最优的方法。Hi@krom请看我关于SQL查询测试的更新:请修复关于单个值相等的表达式。我希望有一种更优雅的方法,但它确实有效,谢谢!)FWIW:我现在使用映射将关系保存到tags表。