如何通过q​​uerybuilder通过其aggreagate函数结果加入其他查询和订单?

时间:2019-02-04 07:12:15

标签: symfony doctrine-orm

有实体:事件,事件突发事件和国家/地区。
一个国家可以包含多个事件。一个事件可以包含多个事件。

/**
 * @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');

0 个答案:

没有答案