【问题标题】:Filter on association id with Doctrine querybuilder使用 Doctrine 查询构建器过滤关联 ID
【发布时间】:2015-09-02 15:49:27
【问题描述】:

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

那么有没有办法不用加入实体就可以通过关联列中的值进行过滤呢?

【问题讨论】:

    标签: doctrine-orm doctrine associations query-builder


    【解决方案1】:

    从 2.4 开始,Doctrine 提供了一个名为 IDENTITY()DQL function,它返回关联列的 FK 值。我找到了一个使用 in this question 的示例。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多