2017-08-31 2 views
1

Mein Code ist:Symfony Lehre Update-Abfrage fehlschlagen

$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(); 

Nun, wenn ich es laufen, ist es mir ein Fehler gibt:

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

ich kann nicht herausfinden, was ich hier falsch zu tun. ich auch mit dem Objekt Update versucht, wie:

$project->setname(); 

usw.

EDIT: Vergessen Sie den Code zu sagen, in einem selbst erstellten Befehl!

+0

Zeigen Sie die Ergebnisse von $ query-> getSql(); – svgrafov

+4

Ich denke nicht, dass es das Problem lösen wird, aber Sie haben '?' In 'u.name = 1 'fehlt. Sollte 'u.name =? 1' sein. –

+0

@JakubMatczak Forgotten aber hat das Problem, gleicher Fehler noch nicht gelöst – Nubcake

Antwort

1

Verwenden von Querybuilder. Beispiel:

$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

Nun, ich habe jetzt einen anderen Fehler: [Lehre \ ORM \ query \ QueryException] [Semantische Fehler] Zeile 0, Spalte 7 in der Nähe von ‚AppBundle \ Command \ Project ': Fehler: Klasse' AppBundle \ Command \ Project 'ist nicht definiert. [Lehre \ ORM \ query \ QueryException] UPDATE AppBundle \ Command \ Project u SET u.name =: Name, u.key =: Schlüssel, u.leader =: leader WHERE u.id =: id Forgot zu sagen, dass der Code in einem selbst erstellten Befehl verwendet wird – Nubcake

+0

Sie benötigen eine Verwendung Anweisung für Project oder einfach zurück zu AppBundle: Project. – Cerad

+0

@Cerad Habe es auch versucht dann habe ich denselben Fehler zurück: SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, für die richtige Syntax in der Nähe von 'key =' EIAD ', leader =' fake.name 'WHERE id =' 12305 '' in Zeile 1 – Nubcake

0

Die Eigenschaften von Entitäten sind privat oder geschützt. Dies bedeutet, dass Sie nicht direkt auf diese zugreifen können: $project->name Sie müssen die Getter und Setter wie folgt verwenden: $project->getName()

+0

$ Projekt ist eine externe cURL-Anfrage an eine API, die mir ein öffentliches Objekt zurückgibt. Nichts mit dem Problem zu tun;) Siehe in dem Fehler, dass die Werte ausgefüllt sind. – Nubcake