我尝试使用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()
我该如何解决? 谢谢。
答案 0 :(得分:1)
您希望获得查询的聚合结果,这意味着您的结果将是关联数组而不是实体实例数组。 尝试使用getArrayResult方法获取数据并相应地访问您的数据。
您可以在树枝视图上执行{{dump(data)}}以查看结果的结构。