我正在尝试这个
$results = this->get('doctrine')->getManager()->createQueryBuilder()
->select('x.a, x.b')
->from('mytable', 'x');
$results->where('AND x.d = :d');
if ('All' == $my_var) {
$results->andWhere('x.a IN (:my_var)')
}
$results->setParameters(
array(
'd' => $var_d,
)
);
现在我想追加setParameters
并在('my_var' => $my_var)
时添加('All' == $my_var)
,是否有可能?
答案 0 :(得分:2)
是的,您可以,但请确保在这种情况下使用setParameter
代替setParameters
,因为setParameters
会忽略先前的参数设置。
错误的例子:
$qb->where('entity.foo = :foo');
$qb->setParameter('foo', $foo); // this param will be ignored after setParameters is called.
// ...
$qb->andWhere('entity.bar = :bar AND entity.baz = :baz')
$qb->setParameters(array('bar' => $bar, 'baz' => $baz)); // wrong statement.
return $qb->getQuery()->getResult();
这会抛出QueryException
条消息:Too few parameters: the query defines 3 parameters but you only bound 2
。
好例子:
$qb->where('entity.foo = :foo');
$qb->setParameter('foo', $foo);
// ...
$qb->andWhere('entity.bar = :bar AND entity.baz = :baz')
$qb->setParameter('bar', $bar);
$qb->setParameter('baz', $baz);
// or setting all parameters to end
$qb->setParameters(array('foo' => $foo, 'bar' => $bar, 'baz' => $baz));
return $qb->getQuery()->getResult();
在您的情况下:
$results = this->get('doctrine')->getManager()->createQueryBuilder()
->select('x.a, x.b')
->from('mytable', 'x');
$results->where('x.d = :d')->setParameter('d', $var_d);
if ('All' === $my_var) {
$results->andWhere('x.a IN (:my_var)')->setParameter('my_var', $my_var);
}
注意:在您的代码$results->where('AND x.d = :d');
中,请记住使用where
/ andWhere
语句,他们已将AND
添加到sql查询结果中。< / p>
答案 1 :(得分:0)
这个怎么样....
if ('All'== $my_var) {
// your total query with parameter
} else{
//query code and skip parameter
}