2017-04-12 44 views
0

我是新与Symfony和学说2SQL请求学说2 QueryBuilder的

我有一个SQL查询我做

SELECT DATE_FORMAT(DATE(history.played_at), '%m-%Y') AS 'date' , 
     COUNT(DISTINCT(l.id)) AS 'value' 
FROM listeners AS l LEFT JOIN history ON history.listener_id = l.id 
WHERE history.played_at IS NOT NULL 
GROUP BY YEAR(DATE(history.played_at)), WEEK(DATE(history.played_at)) 

我想用学说2使用它在我的symfony项目和QueryBuilder的,但我无法找到如何做到这一点

我现在有这个

$qb->select($qb->expr()->countDistinct('l.id')) 
     ->from('AppBundle:Listener', 'l') 
     ->leftJoin('AppBundle:History', 'h', 'l.id = h.listener') 
     ->where($qb->expr()->isNotNull('h.played_at')); 

,但它不工作•全部,很多东西不见了

可能是非常好的,如果有人能告诉我清楚如何做到这一点

+1

您可能需要在此处使用原始查询。 –

+0

@TimBiegeleisen是的,这就是我想要的,但我们很快就可能继续PostGreSQL,然后我需要与QueryBuilder – RomMer

+0

@TimBiegeleisen如果没有其他的方式来做到这一点,我会使用原始查询,但如果它可以做到这一点来自Doctrine的查询生成器我想用它做。问题是我不知道如何去做 – RomMer

回答

0

我不是一个SQL专家,但此查询应该工作:

 $qb = $this->em->createQueryBuilder() 
     ->select('COUNT(DISTINCT l.id)') 
     ->from('AppBundle:Listener', 'l') 
     ->leftJoin('AppBundle:History', 'h') 
     ->where('h.playet_at IS NOT null'); 

如果你想走得更远,我建议你看看主义查询生成器文件 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html

希望这有助于

编辑:WEEKS在原则中不是本地的,但您可以使用它https://github.com/beberlei/DoctrineExtensions