J'ai deux entités qui sont connectées via une relation 1: 1, par exemple: MyEntity.idRelatedEntity
Je veux créer une requête Doctrine où je peux récupérer des données de MyEntity
en fonction d'une valeur d'une certaine colonne dans RelatedEntity
. Quelque chose comme ça ( ça ne marche pas bien sûr):
$entity = $em
->getRepository('MyBundle:RelatedEntity')
->createQueryBuilder('e')
->leftJoin('MyBundle:RelatedEntity', 'r')
->where('r.foo = 1')
->getQuery()
->getResult();
Toute aide serait très appréciée :)
$entity = $em
->getRepository('MyBundle:MyEntity')
->createQueryBuilder('e')
->join('e.idRelatedEntity', 'r')
->where('r.foo = 1')
->getQuery()
->getResult();
La jointure gauche également n'a aucun sens ici (en raison de la clause where qui la fera fonctionner comme la jointure interne)
Notez que vous devez écrire cette requête dans votre MyEntityRepository
public function getMyEntityWithRelatedEntity($parameter)
{
$query = $this->createQueryBuilder('e')
->addSelect('r') // to make Doctrine actually use the join
->leftJoin('e.relatedEntity', 'r')
->where('r.foo = :parameter')
->setParameter('parameter', $parameter)
->getQuery();
return $query->getResult();
}
Et puis utilisez-le dans votre contrôleur/service:
$manager = $this->getDoctrine()->getManager();
$results = $manager->getRepository(MyEntity::class)->getMyEntityWithRelatedEntity(1);