有实体:事件,事件突发事件和国家/地区。
一个国家可以包含多个事件。一个事件可以包含多个事件。
/**
* @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;
}
我需要选择国家/地区,并按eventIncidents的数量排序每个国家/地区的事件。我该如何使用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');