Doctrine orm doctrine2-querybuilder,空参数

Doctrine orm doctrine2-querybuilder,空参数,doctrine-orm,doctrine,query-builder,Doctrine Orm,Doctrine,Query Builder,如果参数没有值,我该怎么办 我的问题是: $query = $this->_em->createQueryBuilder() ->select('u') ->from('Users', 'u') ->where('u.id = ?1') ->andWhere('u.stat

如果参数没有值,我该怎么办

我的问题是:

$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 iif的值是多少?

查询生成器正好用于构建条件查询。你可以做:

$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);
你可以写:

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

聪明的解决方案,但马克斯的答案是更干净,更面向对象的方式。但是+1表示聪明。@Benjamin:谢谢。我更像是SQL类型的人:-)但也许Max的解决方案的执行计划更好