Существуют объекты: Event, EventIncident и Country.
Страна может содержать несколько событий.Событие может содержать несколько инцидентов.
/**
* @ORM\Entity()
*/
class Country {
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="App\Entity\Event", mappedBy="country")
*/
private $events;
}
/**
* @ORM\Entity()
*/
class Event {
/**
* @var Country
* @ORM\ManyToOne(targetEntity="App\Entity\Country", inversedBy="events")
*/
private $country;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="App\Entity\EventIncident", mappedBy="event")
*/
private $eventIncidents;
}
/**
* @ORM\Entity()
*/
class EventIncident {
/**
* @var Event
* @ORM\ManyToOne(targetEntity="App\Entity\Event", inversedBy="eventIncidents")
*/
private $event;
}
Мне нужно выбрать страны и упорядочить события каждой страны по количеству eventIncident.Как я могу сделать это с помощью querybuilder?
Я пытался использовать 2 отдельных запроса: один для получения событий и их инцидентов, а другой для получения стран и их событий, но это не работает.Возможно, я что-то не так делаю.
$qNumberOfEventIncidents = $this->getEntityManager()->getRepository(Event::class)
->createQueryBuilder('e')
->select('e, COUNT(ei) AS incidentsNumber')
->leftJoin('e.eventIncidents', 'ei')
->groupBy('e');
$query = $this->createQueryBuilder('c')
->addSelect('c')
->innerJoin('c.events', 'ce')
->addSelect('ce')
->leftJoin('ei', $qNumberOfEventIncidents)
->addOrderBy('ei.incidentsNumber', 'DESC');