[英]Doctrine 2: Update query with query builder
嗨,我有以下查询,但它似乎不起作用。
$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();
这将返回以下错误消息:
致命错误:未捕获的异常 'Doctrine\\ORM\\Query\\QueryException' 带有消息 '[语义错误] 第 0 行,'testusername WHERE' 附近的第 38 列:错误:'testusername' 未定义。 在 ...
我很乐意提供任何帮助
我认为您需要使用->set()
使所有值参数更安全:
$queryBuilder = $this->em->createQueryBuilder();
$query = $queryBuilder ->update('models\User', 'u')
->set('u.username', ':userName')
->set('u.email', ':email')
->where('u.id = :editId')
->setParameter('userName', $userName)
->setParameter('email', $email)
->setParameter('editId', $editId)
->getQuery();
$result = $query ->execute();
假设有一个管理员仪表板,其中列出了用户,其 id 打印为数据属性,以便可以在某个时候通过 JavaScript 检索。
可以通过这种方式执行更新……
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动作处理:
# 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
}
使用 Doctrine 2.5 (在 Symfony3 之上)的工作示例。
稍加改动,对我来说效果很好
$qb=$this->dm->createQueryBuilder('AppBundle:CSSDInstrument')
->update()
->field('status')->set($status)
->field('id')->equals($instrumentId)
->getQuery()
->execute();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.