我必须使用多对多关联字段(groupes)上的条件更新某些实体(StatistiqueColle)。
以下是我所做的查询,目前无效:
$qb = $this->em->createQueryBuilder();
$qb->update('PACESStatistiqueBundle:StatistiqueColle', 's')
->set('s.banque', 1)
->set('s.statsEntrainement', 0)
->andWhere($qb->expr()->in('s.groupes', 'g'))
->andWhere($qb->expr()->eq('s.banque', ':banque'))
->andWhere($qb->expr()->in('g.id', ':salle'))
->andWhere($qb->expr()->eq($qb->expr()->count('g.id'), ':count'))
->setParameters(['salle' => $groupeSalle, 'banque' => 0, 'count' => 1]);
$qb->getQuery()->execute();
我看到Doctrine并不接受加入更新。如果没有加入,我怎么能做我想做的事?
答案 0 :(得分:0)
更新和删除查询不支持联接,因为并非所有dbms都支持联接。它不会在Doctrine 1或Doctrine 2中实现。但是,您可以通过使用子查询获得相同的效果。
http://www.doctrine-project.org/jira/browse/DC-646
另一个解决方案是将其拆分为两个查询:
喜欢这样的东西:
$qb = $this->em->createQueryBuilder();
$results = $qb->select('PACESStatistiqueBundle:StatistiqueColle', 's')
->andWhere($qb->expr()->in('s.groupes', 'g'))
->andWhere($qb->expr()->eq('s.banque', ':banque'))
->andWhere($qb->expr()->in('g.id', ':salle'))
->andWhere($qb->expr()->eq($qb->expr()->count('g.id'), ':count'))
->setParameters(['salle' => $groupeSalle, 'banque' => 0, 'count' => 1]);
$qb->getQuery()->getResult();
foreach ($results ad $result) {
$result->setBanque(1);
$result->setStatsEntrainement(1);
$this->em->persist($result);
$this->em->flush();
}