使用Doctrine querybuilder过滤关联ID

时间:2015-09-02 15:49:28

标签: doctrine-orm doctrine associations query-builder

我正在使用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>

那么有没有办法按关联列中的值进行过滤而无需加入实体?

1 个答案:

答案 0 :(得分:5)

从2.4开始,Doctrine提供了一个名为IDENTITY()的{​​{3}},它返回一个关联列的FK值。我找到了一个使用DQL function的例子。

此外,您可以混合使用querybuilder和DQL,事实证明,我的问题的解决方案非常简单。

$qb->andWhere($qb->expr()->eq('IDENTITY(ae.associatedEntity)', $id));