使用Doctrine querybuilder过滤关联ID

Mat*_*can 2 doctrine associations query-builder doctrine-orm

我正在使用QueryBuilder在存储库中编写方法。我想where针对实体所拥有的关联进行声明,而无需加入实体

通常,如果我使用常规sql,我会做类似

select * from entity where entity.assocId=5
Run Code Online (Sandbox Code Playgroud)

但是对于学说,我没有关联ID的字段,因为它被映射为该列上的实际实体。

所以我认为我需要这样做以实现相同的目的:

$qb->innerJoin(‘e.associatedEntity', ‘ae', Query\Expr\Join::ON);
$qb->andWhere($qb->expr()->eq(‘ae.id’, $id));
Run Code Online (Sandbox Code Playgroud)

这意味着我需要对join要过滤的每个实体执行“ a ”操作,即使只是ID看起来比操作要昂贵得多。

因此,有没有一种方法可以根据关联列中的值进行过滤而无需加入实体?

Mat*_*can 5

由于2.4教义提供了一种DQL函数调用IDENTITY(),用于返回的关联列中的FK值。我在此问题中找到了一个示例用法。

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

$qb->andWhere($qb->expr()->eq('IDENTITY(ae.associatedEntity)', $id));
Run Code Online (Sandbox Code Playgroud)