Учитывая эту настройку для моей сущности Doctrine 2:
App\Bundle\LorumBundle\Entity\Node:
type: entity
table: node
fields:
id:
id: true
type: integer
unsigned: false
nullable: false
generator:
strategy: IDENTITY
created:
type: datetime
inheritanceType: SINGLE_TABLE
discriminatorColumn:
name: type
type: string
length: 255
discriminatorMap:
a: a
b: b
c: c
App\Bundle\LorumBundle\Entity\A:
type: entity
fields:
status:
type: boolean
App\Bundle\LorumBundle\Entity\B:
type: entity
fields:
status:
type: boolean
App\Bundle\LorumBundle\Entity\C:
type: entity
fields:
title:
type: string
Теперь я хочу получить смешанный список сущностей типа A & B (не C) с status == true
.
Я мог бы написать такой запрос - используя оператор instance of
, чтобы ограничить результат только теми подклассами, которые я хочу, но я получу ошибку, потому что свойство, с которым я хочу сопоставить (статус), не отображается в Суперкласс, даже у всех сущностей, с которыми я хочу сравниться, есть:
$queryBuilder->select('Node');
$queryBuilder->from('App\Bundle\LorumBundle\Entity\Node','Node');
$queryBuilder->add('where',$queryBuilder->expr()->orx(
'Offer INSTANCE OF AppLorumBundle:A',
'Offer INSTANCE OF AppLorumBundle:B'
));
$queryBuilder->where($queryBuilder->expr()->eq('Node.status', '?1'));
$queryBuilder->setParameter(1, true);
$queryBuilder->orderBy('Node.created', 'asc');
$queryBuilder->setFirstResult( 0 );
$queryBuilder->setMaxResults( 200 );
Есть ли способ сделать это, кроме как написать свой собственный персистер и взломать его в Doctrine2?
К сожалению, я не могу просто добавить информацию в суперкласс (в моем реальном сценарии эта ситуация в основном относится к отношениям, которые я не хочу загружать с каждым подклассом)