我正在使用QueryBuilder在存储库中编写方法。我想对实体但不需要加入实体的关联做出where
声明。
通常如果我使用常规sql,我会做类似
的事情select * from entity where entity.assocId=5
但是对于教条,我没有关联关联ID的字段,因为它被映射为该列的实际实体。
所以我认为我需要这样做才能实现同样的目标:
$qb->innerJoin(‘e.associatedEntity', ‘ae', Query\Expr\Join::ON);
$qb->andWhere($qb->expr()->eq(‘ae.id’, $id));
这意味着我需要在我想要过滤的每个实体上执行join
,即使它只是似乎方式更昂贵一个操作的ID,而不是应该的。 / p>
那么有没有办法按关联列中的值进行过滤而无需加入实体?
答案 0 :(得分:5)
从2.4开始,Doctrine提供了一个名为IDENTITY()
的{{3}},它返回一个关联列的FK值。我找到了一个使用DQL function的例子。
此外,您可以混合使用querybuilder和DQL,事实证明,我的问题的解决方案非常简单。
$qb->andWhere($qb->expr()->eq('IDENTITY(ae.associatedEntity)', $id));