有条件地添加到 Doctrine WHERE 子句

用户1032531

应该如何有条件地向 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章