symfony 3.4 中带有学说的真正动态 DQL

Real dynamic DQL with doctrine in symfony 3.4

我正在尝试在 doctrine 中使用 DQL 实现动态查询。我已经检查了几个关于这个主题的 post 但所有的解决方案都是静态的。我想实现这样的目标:

$qb->where(
            $qb->expr()->orX(
                $qb->expr()->like('e.cliente', ':cliente_tag'),
                $qb->expr()->like('e.cliente', ':cliente_tag2'),
                $qb->expr()->like('e.cliente', ':cliente_tag3')
            ),
            $qb->expr()->orX(
                $qb->expr()->like('e.apoderado', ':apoderado_tag'),
                $qb->expr()->like('e.apoderado', ':apoderado_tag2'),
                $qb->expr()->like('e.apoderado', ':apoderado_tag3')
            )
        );

但在这样的循环中:

foreach ($options['camposTexto'] as $i => $campoTexto) {
             switch ($campoTexto['appliedTo']) {
                 case 'apoderado': {
                     $exp = [];
                     foreach ($campoTexto['tags'] as $tag) {
                         $exp[] = $qb->expr()->like('e.apoderado', ':apoderado_tag' . $i);
                         $parameters['apoderado_tag' . $i] = '%' . $tag . '%';
                     }

                     if ($isFirst) {
                         $isFirst = false;
                         $qb->where($qb->expr()->orX($exp));
                     } else {
                         $qb->andWhere($qb->expr()->orX($exp));
                     }

                     break;
                 }
                 case 'cliente': {
                     $exp = [];
                     foreach ($campoTexto['tags'] as $tag) {
                         $expresiones[] = $qb->expr()->like('e.cliente', ':cliente_tag' . $i);
                         $parameters['cliente_tag' . $i] = '%' . $tag . '%';
                     }

                     if ($isFirst) {
                         $isFirst = false;
                         $qb->where($qb->expr()->orX($exp));
                     } else {
                         $qb->andWhere($qb->expr()->orX($exp));
                     }

                     break;
                 }
             }
         }

tags 是一个字符串数组。如您所见,我传递了表达式数组,但学说抛出异常。

到目前为止,我还没有找到解决问题的方法。

有什么想法吗?

提前致谢!

查看 this post 我找到了解决方案。它会是这样的:

    case 'apoderado': {
        $orX = $qb->expr()->orX();
        foreach ($campoTexto['tags'] as $y => $tag) {
        $orX->add($qb->expr()->like('e.apoderado', $qb->expr()->literal('%' . $tag . '%'))); //<= with literal because I can't set the parameters later in the qb
   }
  $expresiones[] = $orX;
  break;
  }

毕竟 case/break

  $andX = $qb->expr()->andX();      
  $qb->where($andX->addMultiple($expresiones));   
  return $qb->getQuery()->getResult();