首页 文章

在symfony 3.4中使用doctrine的真正动态DQL

提问于
浏览
0

我正在尝试使用DQL在doctrine中实现动态查询 . 我已经检查了几个关于这个主题的帖子,但所有解决方案都是静态的 . 我希望实现这样的事情:

$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是一个字符串数组 . 如你所见,我通过了一系列的表达,但是教义却抛出了一个例外 .

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

任何的想法?

提前致谢!

1 回答

  • 0

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

    在所有的情况下/休息

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

相关问题