0

我想做的事情似乎很“经典”,但我没有找到任何例子......这是一种搜索表单,主要是可选参数。

这是我的代码:

$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();

但是,当然,如果我有一些参数nullInvalid parameter number: number of bound variables does not match number of tokens

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

4

1 回答 1

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();
于 2013-09-27T16:53:28.227 回答