Teniendo en cuenta esta configuración para mis Doctrina 2 Entidades:seleccionar entidades de múltiples subclases que se extienden desde una superclase utilizando doctrina 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
Ahora lo que quiero conseguir es básicamente una lista mixta de Entidades del tipo A & B (no C) con el status == true
.
Podría escribir una consulta como esta - usando el operador instance of
para limitar el resultado a las subclases que quiero, pero recibiré un error porque la propiedad con la que quiero hacer coincidir (estado) no está mapeada en la Superclase incluso difíciles todas las Entidades Quiero encontrar equivalencias en las que tienen:
$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);
¿hay alguna manera de hacer esto, sin llegar a escribir su propia persister y cortarlo en Doctrine2?
Por desgracia no es una opción para mí acaba de añadir la información a la superclase (en mi escenario real esta situación se aplica sobre todo a las relaciones, que yo no quiero ser cargado con entusiasmo con cada subclase)
bien, mi problema con esto es que: la unión no es compatible con DQL y yo haría una unión de 2 querys en la misma mesa que parece, así ... un poco "cojo", tal vez sería mejor escribir una consulta SQL personalizada e hidratador ... – Hannes
Puede crear un DQL para cada parte de UNION. Pero depende de qué criterio quiera usar para describir "mejor" – WizardZ