学说2:条件的条件

时间:2013-09-27 16:01:31

标签: search doctrine-orm conditional add where

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

这是我的代码:

$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处有一些参数:Invalid parameter number: number of bound variables does not match number of tokens

我确信有更好的方法来实现这一目标,我只是找不到它!

1 个答案:

答案 0 :(得分:2)

有一个名为$ 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();