Как выполнить запрос на объединение с помощью построителя запросов Symfony и Doctrine
У меня есть две сущности, которые связаны отношением 1:1, например: MyEntity.idRelatedEntity
Я хочу создать запрос доктрины, в котором я могу извлекать данные из MyEntity
в зависимости от значения из определенного столбца в RelatedEntity
. Что-то вроде этого (конечно, это не работает):
$entity = $em
->getRepository('MyBundle:RelatedEntity')
->createQueryBuilder('e')
->leftJoin('MyBundle:RelatedEntity', 'r')
->where('r.foo = 1')
->getQuery()
->getResult();
Любая помощь была бы очень признательна:)
10
2 answers
$entity = $em
->getRepository('MyBundle:MyEntity')
->createQueryBuilder('e')
->join('e.idRelatedEntity', 'r')
->where('r.foo = 1')
->getQuery()
->getResult();
Также левое соединение здесь не имеет смысла (из-за предложения where, которое заставит его работать как внутреннее соединение)
17
Author: Uriziel, 2013-08-21 12:46:36
Обратите внимание, что вы должны написать этот запрос в своем 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();
}
А затем используйте его в своем контроллере/службе:
$manager = $this->getDoctrine()->getManager();
$results = $manager->getRepository(MyEntity::class)->getMyEntityWithRelatedEntity(1);
14
Author: sf_tristanb, 2018-03-27 10:37:33