首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >原则2:使用查询构建器更新查询

原则2:使用查询构建器更新查询
EN

Stack Overflow用户
提问于 2010-12-03 01:12:50
回答 3查看 152K关注 0票数 83

您好,我得到了以下查询,但它似乎不起作用。

代码语言:javascript
复制
$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‘,消息为'Semantical Error line 0,col38 near 'testusername WHERE':错误:'testusername’未定义。‘在...

如果有任何帮助我会很高兴

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-03 01:26:36

我认为你需要使用->set(),让你所有的值参数都成为参数会更安全:

代码语言:javascript
复制
$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();
票数 161
EN

Stack Overflow用户

发布于 2016-04-19 22:45:55

假设有一个管理员仪表板,其中列出了用户,并将其id打印为数据属性,以便可以在某个时候通过JavaScript检索。

可以通过以下方式执行更新…

代码语言: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操作处理:

代码语言:javascript
复制
# 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
}

使用Doctrin2.5(基于Symfony3)的工作示例。

票数 9
EN

Stack Overflow用户

发布于 2019-10-23 14:30:32

只要稍加改动,它对我来说就行得通。

代码语言:javascript
复制
$qb=$this->dm->createQueryBuilder('AppBundle:CSSDInstrument')
               ->update()
               ->field('status')->set($status)
               ->field('id')->equals($instrumentId)
               ->getQuery()
               ->execute();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4337751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档