【问题标题】:doctrine2 - querybuilder, empty parameters学说2 - 查询构建器,空参数
【发布时间】:2011-11-15 10:17:00
【问题描述】:

如果参数没有值怎么办?

我的查询:

$query = $this->_em->createQueryBuilder()
                   ->select('u')
                   ->from('Users', 'u')
                   ->where('u.id = ?1')                   
                   ->andWhere('u.status= ?2')
                   ->setParameter(1, $userid)
                   ->setParameter(2, $status)
                   ->getQuery();

return $query->getResult();

如果没有$status,则不显示任何内容。

我尝试在查询之前放置一个条件来检查它是否为空,但是如果没有设置状态,我可以设置 $status i 的值

【问题讨论】:

    标签: doctrine-orm doctrine query-builder


    【解决方案1】:

    查询构建器正是用于构建条件查询。你可以这样做:

    $qb = $this->_em->createQueryBuilder();
    
    $query = $qb->select('u')
                ->from('Users', 'u')
                ->where('u.id = ?1')                   
                ->setParameter(1, $userid);
    
    if ($status) {
        $qb->andWhere('u.status = ?2')
           ->setParameter(2, $status);
    }
    
    return $qb->getQuery()->getResult();
    

    附带说明,最佳做法是使用命名占位符 e。 G。像这样:

        $qb->andWhere('u.status = :status')
           ->setParameter('status', $status);
    

    【讨论】:

      【解决方案2】:

      你可以写:

      ->andWhere('(u.status= ?2 or ?2 is null)')
      

      【讨论】:

      • 聪明的解决方案,但 Max 的答案更干净,更符合 OOP 方式。但是无论如何都要为聪明+1。
      • @Benjamin:谢谢。我更像是那种 SQL 类型的人 :-) 但是可能,Max 解决方案的执行计划还是更好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多