我正在尝试检查是否存在关系,换句话说,是列为NULL还是已填写。
这里有我的QueryBuilder:
$qb->select('v')
->from('Entities\Voucher','v')
->leftJoin('Entities\VoucherCopy','vc',\Doctrine\ORM\Query\Expr\Join::WITH,'v.voucherCopy = vc.id')
->where("v.code LIKE :voucherCode")
->andWhere('vc.id IS NULL');
如果VoucherCopy没有扩展“实体\代码”-单个表继承,那就可以了
VoucherCopy:
class VoucherCopy extends Codes
代码:
/**
* Entities\DiscountCode
*
* @Table(name="discount_code")
* @Entity()
*
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type",type="string")
* @DiscriminatorMap({"D" = "DiscountCode","VT" = "PortalVoucher","V" = "VoucherCopy"})
*/
class Codes
问题是该查询构建器执行的SQL:
SELECT v0_.*
FROM voucher v0_
LEFT JOIN discount_code d1_ ON (
v0_.discount_code_id = d1_.id
) WHERE (v0_.code LIKE '%DA70511911%' AND d1_.id IS NULL) AND d1_.type IN ('V')
;
注意 AND d1_.type IN ('V')
。这是因为DQL自动添加了此内容,因为它知道这是该实体的鉴别符列,但是这样做AND d1_.id IS NULL
变得多余,因为我无法通过AND d1_.type IN ('V')
检查来检查关系是否失败。 / p>
使用单表继承时是否可以检查关系是否存在?
我已经尝试将leftJoin直接添加到Entities \ Code(父级),但是由于出现错误,所以我无法将区分符列(类型)添加为属性,因为在实体“ Entities \”上重复了“类型”列的定义字段或区分符列映射中的代码。