1

「ElementModule」および「Inscription」との関係ManyToOne(双方向ネル)を持つNoteEntityのフィールド「note」を更新しようとしています。エンティティ「Inscription」は「Etudiant」エンティティと関係ManyToOneを持っています

私はこの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'
4

2 に答える 2

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 ');
于 2012-05-24T20:43:25.787 に答える
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();
于 2012-05-25T09:26:00.657 に答える