在Doctrine中使用继承时查询派生类型的属性

时间:2015-07-05 07:43:42

标签: php orm doctrine-orm query-builder

使用Doctrine的QueryBuilder,在使用单表继承时,如何在派生类型的某个属性上指定 where 条件。

假设我的类型AbstractBillingEntity具有派生类型ComplexBillerComplexBiller本身具有受保护的Doctrine控制属性organisationCode

如何使用QueryBuilder搜索ComplexBiller类型且ComplexBiller.organisationCode > 5类型的所有结算实体?

        $queryBuilder->andWhere("billingEntity INSTANCE OF ComplexBiller")
        $queryBuilder->andWhere(??)

使用Doctrine 2.4,PHP 5.6

1 个答案:

答案 0 :(得分:0)

事实证明,这是Doctrine团队目前无法解决的一个老问题(DCC-16

显然,Doctrine DQL语言的内部使得尝试和实现一种形式的转换成为一种详尽的努力。虽然将来可能会考虑,但锻炼是对子类进行明确要求的子查询:

7

或者,在本机SQL中(取自非常有用的源here

$subExpr = $this->em->createQueryBuilder()
        ->select("anEntity")
        ->from("ChildClass", "anEntity")
        ->where("orgEntity.derivedTypeAttr = :someParam");

$mainExpr = $this->em->createQueryBuilder()
            ->where($queryBuilder->expr()->in("billingEntity.id", $subExpr->getDQL()))
            ->setParameter("someParam", $myVal);