mysql 带可选参数的Dql查询

dhxwm5r4  于 2022-10-31  发布在  Mysql
关注(0)|答案(3)|浏览(170)

我想知道如何使用可选参数进行DQL查询,例如:

public function getUsers($city, $sex, $age)
    {
        $qb = $this->getEntityManager()->createQueryBuilder()
            ->select('u')
            ->where('u.sex = :sex')
            ->andWhere('u.city = :city')
            ->andWhere('u.age = :age')
        ->setParameter(':city', $city);
        ->setParameter(':sex', $sex);
        ->setParameter(':age', $age);
        $query = $qb->getQuery();
        $result = $query->getResult();

    }

如果其中一个参数未定义(=NULL),该怎么办?

2wnc66cl

2wnc66cl1#

public function getUsers($city, $sex, $age)
{
    $qb = $this->getEntityManager()->createQueryBuilder()
        ->select('u')
        ->from('User', 'u');

    if (isset($sex)) {
        $qb->andWhere('u.sex = :sex')
           ->setParameter(':sex', $sex);
    }

    if (isset($city)) {
        $qb->andWhere('u.city = :city')
           ->setParameter(':city', $city);
    }

    if (isset($sex)) {
        $qb->andWhere('u.sex = :sex')
           ->setParameter(':age', $age);
    }

    return $qb->getQuery()->getResult();    
}
tpgth1q7

tpgth1q72#

在这种情况下,设置为NULL的参数可能有意义,因为,即使它不是标准的,您也可以用(只是为了举例)u.age = :age来表示IS NULL条件,其中ageNULL(但是我建议使用read this topic
因此,很明显,如果参数是NULL,您需要自己检查它(如果您希望它们是可选的),并且不要添加条件(因此也不要添加参数绑定)。
请注意,如果sex(作为第一个参数列出)为空,则应在第二个where条件中对andWhere使用where,依此类推。

相关问题