MaN*_*aNa 1 sql doctrine symfony
您好,我在 Doctrine 的 QueryByilder 中遇到问题。我写了一个有 2 个参数的查询,它们影响 where 语句。如果相关参数为空,我想忽略 where 语句。例如,如果 $play = 3 且 $theater = null,则查询必须返回所有带有 play 3 的门票以及任何剧院,这是我的代码:
public function getAllSearchedTickets($play,$teater){
return $this->getEntityManager()->createQuery('
select s from mtadminBundle:ReserveLocation s
join s.reserve a
join a.sance b
where a.acceptCode != 0
and b.play = :play
and b.teater = :teater')
->setParameters(array('play'=>$play,'teater'=>$teater))->getResult();
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
您应该为此使用 QueryBuilder,为了更有效地完成此操作,我将向您展示如何操作,然后以 QueryBuilder 为例:
你的:
public function getAllSearchedTickets($play,$teater){
$query = 'select s from mtadminBundle:ReserveLocation s'.
'join s.reserve a'.
'join a.sance b'.
'where a.acceptCode != 0');
$paramArray = array();
if( $play ) {
$query .= ' and b.play = :play';
$paramArray['play'] = $play;
}
if( $teater ) {
$query .= ' and b.teater = :teater';
$paramArray['teater '] = $teater;
}
return $this->getEntityManager()->createQuery($query)
->setParameters($paramArray)->getResult();
}
Run Code Online (Sandbox Code Playgroud)
查询生成器:
public function getAllSearchedTickets($play,$teater){
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder->select('s')
->from('mtadminBundle:ReserveLocation', 's')
->join('s.reserve', 'a')
->join('a.sance', 'b')
->where('a.acceptCode != 0');
if( $play ) {
$queryBuilder->andWhere('b.play = :play');
$queryBuilder->setParameter('play', $play);
}
if( $teater ) {
$queryBuilder->andWhere('b.teater = :teater');
$queryBuilder->setParameter('teater', $teater);
}
return $queryBuilder->getResult();
}
Run Code Online (Sandbox Code Playgroud)