我正在尝试更新Note Entity中的字段“note”,它与ManyToOne(bidirectionnel)具有“ElementModule”和“Inscription”的关系,实体“Inscription”具有ManyToOne与“Etudiant”实体的关系
我尝试了这个DQL查询:
$query = $this->_em->createQuery('update UaePortailBundle:Note u JOIN u.inscription i JOIN u.elementmodule e join i.etudiant et set u.note = ?3
where et.id = ?1 and e.id = ?2 ');
$query->setParameter(1, $etudiant);
$query->setParameter(2, $element);
$query->setParameter(3, $note);
$resultat = $query->execute();
我收到此错误
[Syntax Error] line 0, col 50: Error: Expected Doctrine\ORM\Query\Lexer::T_EQUALS, got 'i'
答案 0 :(得分:2)
LEFT JOIN或者特别是JOIN仅在MySQL的UPDATE语句中受支持。 DQL抽象了常见ansi sql的子集,因此这是不可能的。尝试使用subselect或IDENTITY(您必须使用最新版本的Doctrine 2.2.2):
createQuery('update UaePortailBundle:Note u set u.note = ?3
where IDNETITY(u.inscription) = ?1 and IDENTITY(u.elementmodule) = ?2 ');
答案 1 :(得分:1)
在搜索并尝试使用doctrine dql找到解决方案之后,我无法找到它,所以我使用直接sql查询来更新数据库。
$stmt = $this->getEntityManager()
->getConnection()
->prepare("update note set note = :note where `etudiant_id` like :etudiant_id and `elementmodule_id` like :elementmodule_id");
$stmt->bindValue('etudiant_id',$etudiant);
$stmt->bindValue('elementmodule_id' ,$element );
$stmt->bindValue('note', $note);
$stmt->execute();