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的解决方案的执行计划更好