2017-08-31 84 views
1

我的代碼是:Symfony的學說更新查詢失敗

$query = $em->createQuery("UPDATE AppBundle:Project u SET u.name=1, u.key=?2, u.leader=?3 WHERE u.id = ?4"); 
$query->setParameter(1, $project->name); 
$query->setParameter(2, $project->key); 
$query->setParameter(3, $project->lead->name); 
$query->setParameter(4, $project->id); 
$result = $query->getResult(); 

現在,當我運行它,它給了我一個錯誤:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key = 'EIAD', leader = 'fake.name' WHERE id = '12305'' at line 1

我找不出我在做什麼錯在這裏。 我甚至與對象更新嘗試這樣的:

$project->setname(); 

編輯:忘了說的代碼在自己創建的命令用!

+0

顯示$ query-> getSql();的結果。 – svgrafov

+4

我不認爲它會解決這個問題,但是你有'?'缺少'u.name = 1'。應該是'u.name =?1'。 –

+0

@JakubMatczak忘了但沒有解決問題,同樣的錯誤仍然 – Nubcake

回答

1

使用Querybuilder。示例:

$em = $this->getDoctrine()->getManager();  
$query = $em->getRepository(Project::class)->createQueryBuilder('') 
      ->update(Project::class, 'u') 

      ->set('u.name', ':name') 
      ->set('u.key', ':key') 
      ->set('u.leader', ':leader') 
      ->setParameter('name', $project->name) 
      ->setParameter('key', $project->key) 
      ->setParameter('leader', $project->leader) 

      ->where('u.id = :id') 
      ->setParameter('id', $project->id) 
      ->getQuery(); 

$result = $query->execute(); 
+0

嗯,我現在有另一個錯誤: [Doctrine \ ORM \ Query \ QueryException] [語義錯誤]行0,接近'AppBundle \ Command \ Project':錯誤:類'AppBundle \ Command \ Project'未定義。 [學說\ ORM \查詢\ QueryException] UPDATE的appbundle \ COMMAND \項目U盤u.name =:姓名,u.key =:鍵,u.leader =:領導WHERE u.id =:ID 忘記說這個代碼是用在一個自創的命令中的 – Nubcake

+0

您需要一個用於Project的use語句或者回到AppBundle:Project。 – Cerad

+0

@Cerad同樣嘗試過它,我得到了相同的錯誤:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'key ='EIAD',leader ='fake.name'WHERE id ='12305'附近使用正確的語法。 – Nubcake

0

實體的屬性是私有的或受保護的。這意味着你不能像這樣直接訪問它們:$project->name你必須使用這樣的getter和setter:$project->getName()

+0

$ project是api的一個外部cURL請求,它給我一個公共對象。與問題無關;)請參閱填寫值的錯誤。 – Nubcake