使用内连接进行多重选择

时间:2017-03-28 10:49:26

标签: php symfony doctrine-orm

我尝试使用Doctrine转换这个简单的SQL请求,但没有成功:

SELECT `groups`.`departure`, COUNT(`group_users`.`group_id`) as 'teamLength' FROM `groups` INNER JOIN `group_users` WHERE `groups`.`id` = `group_users`.`group_id` AND departure BETWEEN '2017-03-01' AND '2017-03-31'

目前,我的代码如下:

public function findDatesBetween(\AppBundle\Entity\Itinerary $itinerary, \DateTime $firstDate, \DateTime $lastDate)
{
  $q = $this->createQueryBuilder('g')
    ->select('g', 'COUNT(gu.group) teamLength')
    ->innerJoin('AppBundle:GroupUser', 'gu', Join::WITH, 'g.id = gu.group')
    ->andWhere('g.itinerary = :itineraryId')
      ->setParameter('itineraryId', $itinerary->getId())
    ->andWhere('g.departure BETWEEN :firstDate AND :lastDate')
    ->setParameter('firstDate', $firstDate->format('Y-m-d'))
    ->setParameter('lastDate', $lastDate->format('Y-m-d'));

  return ($q->getQuery()->getResult());
}

如果我更改select()这样:->select('g'),则可行。但我需要COUNT(gu.group)

使用实际代码,当我尝试使用departure时,我有一个例外:调用数组上的成员函数getDeparture()

我该如何解决? 谢谢。

1 个答案:

答案 0 :(得分:1)

您希望获得查询的聚合结果,这意味着您的结果将是关联数组而不是实体实例数组。 尝试使用getArrayResult方法获取数据并相应地访问您的数据。

您可以在树枝视图上执行{{dump(data)}}以查看结果的结构。