我必须在多对多关联领域(组)上更新一些条件(catsistiquecolle)。
这是我目前无法使用的查询:
$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();
我看到该学说不接受加入更新。如果没有加入,我该怎么做?
在更新和删除查询上不支持加入,因为在所有DBMS上不支持它。它不会在学说1或学说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();
}