2

如果参数没有值怎么办?

我的查询:

$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

4

2 回答 2

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

附带说明一下,最佳做法是使用命名占位符,例如:

    $qb->andWhere('u.status = :status')
       ->setParameter('status', $status);
于 2011-09-12T15:02:19.420 回答
1

你可以写:

->andWhere('(u.status= ?2 or ?2 is null)')
于 2011-09-12T15:02:30.240 回答