doctrine2 - querybuilder,空参数

时间:2011-09-12 14:51:11

标签: doctrine-orm doctrine query-builder

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

我的疑问:

$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,那么它不会显示任何内容。

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:1)

你可以写:

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