2017-08-31 9 views
1

私のコードを失敗している:私はそれを実行したときにsymfonyのDoctrineの更新クエリは

$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

もう1つのエラーが発生した: [Doctrine \ ORM \ Query \ QueryException] [意味的なエラー] 'AppBundle \ Command \ Project ':エラー:' AppBundle \ Command \ Project 'クラスが定義されていません。 [教義\ ORM \クエリー\ QueryException] UPDATE AppBundle \コマンド\プロジェクトは、uがSET u.name =:名前、u.key =:キー、u.leader =:リーダーu.id =:ID 自己作成コマンドでコードが使用されていると忘れました – Nubcake

+0

Project用のuse文が必要です。またはAppBundle:Projectに戻ってください。 – Cerad

+0

@ Keradまた、同じエラーが戻ってきました。SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 'key =' EIAD '、leader =' fake.name 'の近くで使用する正しい構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。WHERE id =' 12305 '' 1行目 – Nubcake

0

エンティティのプロパティはプライベートまたは保護されています。つまり、$project->nameのようにゲッターとセッターを使用する必要があります。$project->getName()

+0

$ projectは私に公開オブジェクトを返すapiに対する外部のcURLリクエストです。問題と何も関係ありません;)値が記入されているエラーを参照してください。 – Nubcake

関連する問題