рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЬрд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореИрдВ рдЕрднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдореЗрдВ GROUP_CONCAT () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ Doctrine2 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Doctrine2 рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдмреЗрдВрдЬрд╛рдорд┐рди рдПрдмрд░реЗрд▓реА) рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ
рдореМрдЬреВрджрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ "GROUP_CONCAT рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╕рдорд░реНрдерди" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ MySQL рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди DBMS рдХреЛ рджрд╕реНрддрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдкреЛрд╕реНрдЯ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред
рдЪреВрдБрдХрд┐ рдореБрдЭреЗ рдЧреБрдЧрд▓реА рдХрд░рдХреЗ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдВрдЬрд╛рдорд┐рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд▓реЗрддреЗ рд╣реБрдП)ред рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ:
namespace DoctrineExtensions\Query\Mysql; use Doctrine\ORM\Query\AST\Functions\FunctionNode, Doctrine\ORM\Query\Lexer; class GroupConcat extends FunctionNode { public $isDistinct = false; public $pathExp = null; public $separator = null; public $orderBy = null; 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; }
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
$query = $this->createQueryBuilder('c') ->select(" c as company, GroupConcat(b.id, ';', b.headOffice, ';', b.city, ';', s.name ORDER by b.id SEPARATOR '|') AS branches ")->leftJoin('c.branches','b') ->leftJoin('b.country','s') ->groupBy('c.id') ->setFirstResult(0) ->setMaxResults(10) ->getQuery() ; $result = $query->getResult();
рд╡рд┐рд╖рдп рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди:
Doctrine2 рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо DQL рдлрд╝рдВрдХреНрд╢рди рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ ред
Symfony2 рдореЗрдВ рдХрд╕реНрдЯрдо DQL рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗрдВ ред
MySQL рдлрд╝рдВрдХреНрд╢рди GROUP_CONCAT рдХрд╛ рд╡рд┐рд╡рд░рдг ред