我有一列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")
我已经做了很多工作来使它起作用,但是不会...有什么想法吗?
答案 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
希望获得帮助