php - 学说:检查鉴别器实体是否存在关系
问题描述
我正在尝试检查关系是否存在,换句话说,列是 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字段或鉴别器列映射。
解决方案
推荐阅读
- python - 在 pandas 数据框中的 groupby 之后选择每个组中的前 3 个类别
- oracle - 如何将oracle数据库从企业版迁移到标准版
- javascript - 如何从 Highcharter 股票图中提取最小和最大日期?
- jquery - 在列表中显示段落内容
- haskell - 如何在 GraalVM 上运行 Haskell?
- module - 无法加载模板文件
- java - ModelMapper 采用 toString 方法转换属性?
- c# - 补高阶函数
- ios - simdJson 如何在iOS程序中使用simdJson?(objective-C)
- python - 如何修改找不到元素的默认等待30秒?