doctrine2 - построитель запросов, пустые параметры - PullRequest
2 голосов
/ 12 сентября 2011

что я могу сделать, если параметр не имеет значения?

мой запрос:

$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, если нет установленного статуса

Ответы [ 2 ]

9 голосов
/ 12 сентября 2011

Конструктор запросов предназначен именно для создания условных запросов. Вы могли бы сделать:

$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. г. как это:

    $qb->andWhere('u.status = :status')
       ->setParameter('status', $status);
1 голос
/ 12 сентября 2011

Вы можете написать:

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