与JOIN的学说查询构建器更新



我必须在多对多关联领域(组)上更新一些条件(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();
}

相关内容

  • 没有找到相关文章

最新更新