symfony2: Using group_concat in QueryBuilder(Doctrine)

后端 未结 1 1444
日久生厌
日久生厌 2020-12-19 06:00

I am trying to use GROUP_CONCAT() in doctrine using querybuilder()

I tried this

   $qb=$this->em->createQueryBuilder();
   $qb->select(\'ca         


        
相关标签:
1条回答
  • 2020-12-19 06:48

    You will need to create your own Doctrine function to use GROUP_CONCAT;

    config.yml;

      orm:
      dql:
        string_functions:
            GROUP_CONCAT: Your\Bundle\DQL\GroupConcat
    

    Your\Bundle\DQL\GroupConcat.php;

    (source: https://github.com/beberlei/DoctrineExtensions/blob/master/src/Query/Mysql/GroupConcat.php)

     use Doctrine\ORM\Query\Lexer;
     use Doctrine\ORM\Query\AST\Functions\FunctionNode;
    
     class GroupConcat extends FunctionNode
     {
    public $isDistinct = false;
    public $expression = null;
    
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return 'GROUP_CONCAT(' .
            ($this->isDistinct ? 'DISTINCT ' : '') .
            $this->expression->dispatch($sqlWalker) .
        ')';
    }
    
    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
    
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
    
        $lexer = $parser->getLexer();
        if ($lexer->isNextToken(Lexer::T_DISTINCT)) {
            $parser->match(Lexer::T_DISTINCT);
    
            $this->isDistinct = true;
        }
    
        $this->expression = $parser->SingleValuedPathExpression();
    
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }
    }
    

    Then in your query builder (or DQL);

      $qb->select('GROUP_CONCAT(category.name)');
    
    0 讨论(0)
提交回复
热议问题