2017-07-28 38 views
0

愚蠢的問題,但我找不到任何答案。在學說中更新總關係計數器

我需要執行這樣的查詢:

$em 
    ->createQueryBuilder() 
    ->update('AppBundle:Contest\Member', 'm') 
    ->innerJoin('m.votes', 'v') 
    ->set('m.total_votes', 'COUNT(v.id)') 
    ->where('m.id = :member') 
    ->setParameter('member', $member->id()) 
    ->getQuery() 
    ->execute() 
; 

或通過DQL

UPDATE 
    AppBundle:Contest\Member AS m 
INNER JOIN 
    m.votes v 
SET 
    m.total_votes = COUNT(v.id) 
WHERE 
    m.id = :member 

主義斷然拒絕EXECUT查詢。

我在做什麼錯了?

回答

0

我找到了解決方案

$total = $em 
    ->getRepository('AppBundle:Contest\Member\Vote') 
    ->createQueryBuilder('v') 
    ->select('COUNT(v.id)') 
    ->where('v.member = :member') 
    ->setParameter('member', $member->getId()) 
    ->getDQL() 
; 

$em->createQueryBuilder() 
    ->update('AppBundle:Contest\Member', 'm') 
    ->set('m.total_votes', '('.$total.')') 
    ->where('m.id = :member') 
    ->setParameter('member', $member->getId()) 
    ->getQuery() 
    ->execute() 
;