Hallo, ich habe die folgende Abfrage, aber es scheint nicht zu funktionieren.
$q = $this->em->createQueryBuilder()
->update('models\User', 'u')
->set('u.username', $username)
->set('u.email', $email)
->where('u.id = ?1')
->setParameter(1, $editId)
->getQuery();
$p = $q->execute();
Dies gibt die folgende Fehlermeldung zurück:
Schwerwiegender Fehler: Nicht erfasste Ausnahme 'Doctrine \ ORM \ Query \ QueryException' mit der Meldung '[Semantical Error] Zeile 0, Spalte 38 in der Nähe von' testusername WHERE ': Fehler:' testusername 'ist nicht definiert.' im ...
Ich würde mich über jede Hilfe freuen
use $qb->update(…)->set('u.username', $qb->createNamedParameter($username))
den Teil -> setParameter weglassen. Das ist IMO der schönste Weg. Eine ähnliche Methode ist-> createPositionalParameter()
. Siehe doctrine-dbal.readthedocs.org/en/latest/reference/…Angenommen, es gibt ein Administrator-Dashboard, in dem Benutzer mit ihrer ID als Datenattribut gedruckt werden, damit sie irgendwann über JavaScript abgerufen werden können.
Ein Update könnte auf diese Weise ausgefü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- Aktionsbehandlung:
# 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 Doctrine 2.5 (über Symfony3) .
quelle
Mit einer kleinen Änderung hat es gut für mich funktioniert
$qb=$this->dm->createQueryBuilder('AppBundle:CSSDInstrument') ->update() ->field('status')->set($status) ->field('id')->equals($instrumentId) ->getQuery() ->execute();
quelle