Search 教义2:条件对条件

Search 教义2:条件对条件,search,doctrine-orm,conditional,add,where,Search,Doctrine Orm,Conditional,Add,Where,我想做的似乎很“经典”,但我找不到任何例子。。。 这是一种搜索形式,主要是可选参数 这是我的密码: $obj = $this->getEntityManager() ->createQueryBuilder() ->select("p") ->from("Client") if ($email) { $obj->add('where', $obj->expr

我想做的似乎很“经典”,但我找不到任何例子。。。 这是一种搜索形式,主要是可选参数

这是我的密码:

$obj = $this->getEntityManager()
        ->createQueryBuilder()
            ->select("p")
            ->from("Client")
        if ($email) {
            $obj->add('where', $obj->expr()->like('p.email', ':email'));
        }
        if ($name) {
            $obj->add('where', $obj->expr()->like('p.name', ':name'));
        }
        if ($firstname) {
            $obj->add('where', $obj->expr()->like('p.firstname', ':firstname'));
        }
        if ($postalCode) {
            $obj->add('where', $obj->expr()->like('p.postalCode', ':postalCode'));
        }

$obj->setParameters(array('email' => $email,'name'=> $name, 'firstname' => $firstname, 'postalCode' => $postalCode))
        ->getQuery()->getResult();
但是,当然,如果我在
null
处有一些参数:
无效参数编号:绑定变量的数量与令牌的数量不匹配


我确信有更好的方法来实现这一点,我就是找不到

有一个名为$parameters的数组变量,然后在每个if语句的主体内设置它

$parameters = array()
$obj = $this->getEntityManager()
    ->createQueryBuilder()
    ->select("p")
    ->from("Client")...

if ($email) {
    $obj->add('where', $obj->expr()->like('p.email', ':email'));
    $parameters['email'] = $email;
}
if ($name) {
    $obj->add('where', $obj->expr()->like('p.name', ':name'));
    $parameters['name'] = $name;
}
...

$obj->setParameters($parameters)->getQuery()->getResult();

太好了,我不知道为什么我没想到。谢谢