Symfony 查询生成器(多对多关系)
Posted
技术标签:
【中文标题】Symfony 查询生成器(多对多关系)【英文标题】:Symfony Query Builder (Many to many relation) 【发布时间】:2021-12-18 13:38:45 【问题描述】:我对 QueryBuilder 有疑问。 我有两个实体:产品,属性,它们是多对多关系(每个产品可以有很多属性,每个属性可以有很多产品) 我创建产品存储库函数 findByAttributes()
public function findByAttributes($attributes)
$qb = $this->createQueryBuilder('p')
->join('p.attributes', 'a')
->where('a.slug = :slug1 OR a.slug = :slug2')
->setParameter('slug1', 'red')
->setParameter('slug2', 'blue')
;
return $qb->getQuery()->getResult();
当我使用 OR 时,它工作正常,但是当我切换到 AND 时,结果为空。 使用 AND 我只想选择同时具有这两种属性的产品。
我哪里错了?
Tnx
【问题讨论】:
a.slug
不能同时等于两个不同的字符串,你确定这里没有问题吗?
嗯...我只想选择具有这两种属性的产品
a.slug
是什么?一个字符串?数组 ?你的 where 条件是:a.slug = 'red' 和 a.slug = 'blue',怎么可能同时出现?
a.slug 是一个字符串。每个产品不能有很多属性。
那你没看到这里的问题吗?您希望能够检查 a.slug 是否同时等于两个不同的字符串。你说你想只选择具有这两种属性的产品,这怎么可能?是否有多个 slug 属性?
【参考方案1】:
我明白了!
public function findByAttributes(array $attributes)
$qb = $this->createQueryBuilder('p');
foreach ($attributes as $i => $attribute)
$qb->join('p.attributes', 'a'.$i)
->andWhere('a'.$i.'.slug = :slug'.$i.'')
->setParameter('slug'.$i, $attribute);
return $qb->getQuery()->getResult();
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Symfony 查询生成器(多对多关系)的主要内容,如果未能解决你的问题,请参考以下文章