Doctrine 2: consulta de actualización con generador de consultas

Hola, tengo la siguiente consulta, pero parece que no funciona.

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

Esto devuelve el siguiente post de error:

Error fatal: exception no detectada 'Doctrine \ ORM \ Query \ QueryException' con el post '[Semantical Error] line 0, col 38 near' testusername WHERE ': Error:' testusername 'no está definido.' en …

Estaría contento de cualquier ayuda

Creo que necesitas usar Expr con ->set() :

 $qb = $this->em->createQueryBuilder(); $q = $qb->update('models\User', 'u') ->set('u.username', $qb->expr()->literal($username)) ->set('u.email', $qb->expr()->literal($email)) ->where('u.id = ?1') ->setParameter(1, $editId) ->getQuery(); $p = $q->execute(); 

O eso o haz todos tus parameters de valores:

 $qb = $this->em->createQueryBuilder(); $q = $qb->update('models\User', 'u') ->set('u.username', '?1') ->set('u.email', '?2') ->where('u.id = ?3') ->setParameter(1, $username) ->setParameter(2, $email) ->setParameter(3, $editId) ->getQuery(); $p = $q->execute(); 

Supongamos que tiene un server que muestra una list de usuarios (accesible para algunos administradores que pueden tener acceso de lectura / escritura en los detalles de los usuarios) .
Allí puede imprimir el id de los usuarios en su propia fila como un atributo de datos para recuperarlo de Javascript mientras se desencadena algún evento.

Entonces, una actualización se puede ejecutar de esta manera …

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

Y dentro de la acción de manejo (ajax)

  # Post datas may be handled with a specific custom formType # … OR … # Directly 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 } # … 

Ejemplo de trabajo con Doctrine 2.5 (encima de Symfony3) .