我想做的事情似乎很“经典”,但我找不到任何例子...... 这是一种搜索形式,主要是选项参数。
这是我的代码:
$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
我确信有更好的方法来实现这一目标,我只是找不到它!
答案 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();