应该如何有条件地向 WHERE 子句添加约束?例如,如果提供sex
, maxAge
, and minAge
,则 WHERE 子句应该是WHERE sex=? AND maxAge<? AND minAge>?
,但如果maxAge
没有提供,则应该是WHERE sex=? AND minAge>?
下面的逻辑可能会确定是否使用where()
或andWhere()
,但是,肯定不应该使用。
<?php
// $qb instanceof QueryBuilder
$qb->select('u')
->from('User', 'u');
if(isset($param['sex'])) {
$qb->where('u.sex = ?1')->setParameter(1, $param['sex']);
}
if(isset($param['maxAge'])) {
if(isset($param['sex'])) {
$qb->andWhere('u.age < ?2')->setParameter(2, $param['maxAge']);
}
else {
$qb->where('u.age < ?2')->setParameter(2, $param['maxAge']);
}
}
if(isset($param['minAge'])) {
if(isset($param['sex'])|| isset($param['maxAge'])) {
$qb->andWhere('u.age > ?3')->setParameter(3, $param['minAge']);
}
else {
$qb->where('u.age > ?3')->setParameter(3, $param['minAge']);
}
}
不需要所有这些条件检查。andWhere
随处使用即可。
<?php
// $qb instanceof QueryBuilder
$qb->select('u')
->from('User', 'u');
if(isset($param['sex'])) {
$qb->andWhere('u.sex = :sex')->setParameter('sex', $param['sex']);
}
if(isset($param['maxAge'])) {
$qb->andWhere('u.age < :maxAge')->setParameter('maxAge', $param['maxAge']);
}
if(isset($param['minAge'])) {
$qb->andWhere('u.age > :minAge')->setParameter('minAge', $param['minAge']);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句