2017-04-12 45 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