Adi*_*oui 3 php foreach doctrine query-builder symfony
我需要使用 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);
}
Run Code Online (Sandbox Code Playgroud)
这给了我:
....WHERE .... AND (a0_.first_name = ? OR a0_.last_name = ?) AND (a0_.first_name = ? OR a0_.last_name = ?) ORDER BY a0_.first_name ASC
虽然我需要:
...WHERE ..... AND (a0_.first_name = ? OR a0_.last_name = ? OR a0_.first_name = ? OR 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);
Run Code Online (Sandbox Code Playgroud)
您能否帮助我使用 foreach 语句来实现我的目标。感谢您通常的帮助。
对于需要其中一种解决方案的每个人:
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);
}
Run Code Online (Sandbox Code Playgroud)