Как условно добавить ограничения к предложению WHERE?Например, если указаны sex
, maxAge
и 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']);
}
}