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表。