真正的动态 DQL 与 symfony 3.4 中的教义



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

$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;
                 }
             }
         }

标记是一个字符串数组。正如你所看到的,我通过了解释数组,但教义给我抛出了一个例外。

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

知道吗?

提前感谢!

看着这篇文章,我想出了解决方案。它会是这样的:

    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;
  }

在所有案例/中断之后

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

相关内容

  • 没有找到相关文章

最新更新