2012-05-24 61 views
1

我試圖更新與「ElementModule」和「銘文」具有關係ManyToOne(雙向通信)的註釋實體中的字段「註釋」,實體「銘文」與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' 

回答

2

LEFT JOIN,或在特定的JOIN只在UPDATE語句支持MySQL的。 DQL提取了常見的ansi sql的一個子集,所以這是不可能的。與子查詢或身份嘗試(必須使用最新版本的教義2.2.2):

createQuery('update UaePortailBundle:Note u set u.note = ?3 
      where IDNETITY(u.inscription) = ?1 and IDENTITY(u.elementmodule) = ?2 '); 
+0

我想這一點,但是,它不工作,因爲我的學說版本是2.0 –

+0

如果你想使用DQL,你必須更新你的學說版本2.2.2,或者您可以使用NativeQuery :) –

1

搜索,試圖找到,使用學說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();