2017-07-28 46 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() 
;