我需要使用foreach语句使用Doctrine QueryBuilder创建一个查询,目前使用以下一个但不是最正确的:
// $query object
foreach ($searches as $value) {
$query->andWhere($query->expr()->orX(
$query->expr()->eq('c.firstName', ':name'),
$query->expr()->eq('c.lastName', ':name')
))->setParameter('name', $value);
}
这给了我:
.... WHERE .... AND(a0_.first_name =?OR a0_.last_name =?)AND (a0_.first_name =?或a0_.last_name =?)ORDER BY a0_.first_name ASC
虽然我需要:
... WHERE ..... AND(a0_.first_name =?OR a0_.last_name =?OR a0_.first_name =?或者a0_.last_name =?)ORDER BY a0_.first_name ASC
我需要这样的东西,但是PHP并没有这样做。允许它当然:
// $query object
$query->andWhere($query->expr()->orX(
foreach ($searches as $value) {
$query->expr()->eq('c.firstName', ':name'),
$query->expr()->eq('c.lastName', ':name')
}
)
)->setParameter('name', $value);
请你帮我用foreach声明达到我的目标。感谢您的平常帮助。
答案 0 :(得分:1)
对于每个需要其中一种解决方案的人:
if (!empty($search)) {
$orX = $query->expr()->orX();
$i=0;
foreach ($searches as $value) {
$orX->add($query->expr()->eq('c.firstName', ':name'.$i));
$orX->add($query->expr()->eq('c.lastName', ':name'.$i));
$query->setParameter('name'.$i, $value);
$i++;
}
$query->andWhere($orX);
}
答案 1 :(得分:0)
您好,您可以通过使用CONCAT和IN阵列
来使用此aproche->where("CONCAT(CONCAT(c.firstName, '_'),c.lastName) IN (:names)")->setParameter('names', $names)
像这样的变量$ names
array(firstName_lastName,firstName1_lastName,firstName2_lastName2,...);