Schwerwiegender Fehler: Nicht erfasste Ausnahme „Doctrine\ORM\Query\QueryException“ mit Meldung „[Semantical Error] Zeile 0, Spalte 38 in der Nähe von ‘testusername WO’: Fehler: ‘testusername’ ist nicht definiert.’ in …
Ich würde mich über jede Hilfe freuen
rojoca
Ich denke, Sie müssen verwenden ->set() Es ist viel sicherer, alle Ihre Werteparameter zu machen:
Sie sollten Ihre Variablen immer als Parameter an die Doctrine-Abfrage übergeben!
– Pi Wi
9. Januar 2015 um 10:51 Uhr
du kannst auch use $qb->update(…)->set('u.username', $qb->createNamedParameter($username)) und lassen Sie den ->setParameter-Teil weg. Das ist IMO der netteste Weg. Eine ähnliche Methode ist -> createPositionalParameter(). Sehen Doktrin-dbal.readthedocs.org/en/latest/reference/…
– Adrian Föder
26. Februar 2015 um 9:21 Uhr
Es ist nicht einmal “Sie sollten” – Sie müssen verwenden setParameter Andernfalls verwenden Sie get [Syntax Error] line 0, col 80: Error: Expected Literal, got '*' Error.
– Serhii Popov
26. Juli um 14:40 Uhr
Stphane
Angenommen, es gibt ein Administrator-Dashboard, in dem Benutzer mit ihrer ID als Datenattribut aufgelistet sind, damit sie irgendwann über JavaScript abgerufen werden kann.
Ein Update könnte so durchgeführt werden …
class UserRepository extends \Doctrine\ORM\EntityRepository
{
public function updateUserStatus($userId, $newStatus)
{
return $this->createQueryBuilder('u')
->update()
->set('u.isActive', '?1')
->setParameter(1, $qb->expr()->literal($newStatus))
->where('u.id = ?2')
->setParameter(2, $qb->expr()->literal($userId))
->getQuery()
->getSingleScalarResult()
;
}
AJAX Aktionshandhabung:
# Post datas may be:
# handled with a specific custom formType — OR — retrieved from request object
$userId = (int)$request->request->get('userId');
$newStatus = (int)$request->request->get('newStatus');
$em = $this->getDoctrine()->getManager();
$r = $em->getRepository('NAMESPACE\User')
->updateUserStatus($userId, $newStatus);
if ( !empty($r) ){
# Row updated
}
Arbeitsbeispiel mit Lehre 2.5 (auf Symfony3).
Mit einer kleinen Änderung hat es bei mir gut funktioniert