首页 > 解决方案 > 学说:检查鉴别器实体是否存在关系

问题描述

我正在尝试检查关系是否存在,换句话说,列是 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 没有扩展“实体\代码”- 单表继承,这将是可以的

凭证复印件:

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')检查失败。

是否可以在使用单表继承时检查关系是否存在?

我已经尝试直接向 Entities\Code(父级)leftJoin,但我无法将鉴别器列(类型)添加为属性,因为您收到错误:Duplicate definition of column 'type' on entity 'Entities\Codes' in字段或鉴别器列映射。

标签: phpmysqldoctrine-ormquery-builderdiscriminator

解决方案


推荐阅读