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 がない場合は、何も表示されません。

クエリの前に条件を入れて null かどうかを確認しようとしましたが、ステータスが設定されていない場合に $status を設定できる値は何ですか

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 に答える