Я пытаюсь проверить, существует ли связь, другими словами, является ли столбец 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')
.
Возможно ли проверить, существует ли связь при использовании наследования одной таблицы?
Я пробовал leftJoin напрямую в Entities \ Code (родительский), но я не могу добавить столбец дискриминатора (тип) в качестве свойствапотому что вы получаете сообщение об ошибке: Дублируйте определение столбца type в сущности Entities \ Codes в сопоставлении столбца поля или дискриминатора.