$query->andWhere() 中的 Foreach 语句

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 语句来实现我的目标。感谢您通常的帮助。

Adi*_*oui 6

对于需要其中一种解决方案的每个人:

    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)

  • 您确定它按您的预期工作吗?您正在使用单个 `:name` 参数,并在每次迭代时覆盖它。 (2认同)