使用Doctrine的QueryBuilder
,在使用单表继承时,如何在派生类型的某个属性上指定 where 条件。
假设我的类型AbstractBillingEntity
具有派生类型ComplexBiller
。 ComplexBiller
本身具有受保护的Doctrine控制属性organisationCode
。
如何使用QueryBuilder
搜索ComplexBiller
类型且ComplexBiller.organisationCode > 5
类型的所有结算实体?
$queryBuilder->andWhere("billingEntity INSTANCE OF ComplexBiller")
$queryBuilder->andWhere(??)
使用Doctrine 2.4,PHP 5.6
答案 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);