symfony2:如何在QueryBuilder中使用group_concat

我有嵌套集(使用Gedmo树)实体称为“位置”。实体“Appartment”具有location_id,我需要做的是将称为“path”的标量值映射到查询返回所有的公寓。

在Doctrine1中,我有这个代码:

/**
* Add "path" to each element
* 
* @param Doctrine_Query $query
* @param string $separator
*/
protected function addScalar_path(Doctrine_Query $query, $separator=", ")
{
    $subquery = "k99.root_id=o.root_id AND k99.lft<=o.lft AND k99.rgt>=o.rgt AND k99.level<=o.level" ;

    $query->addSelect("(SELECT GROUP_CONCAT(k99.name ORDER BY k99.level SEPARATOR '$separator') FROM Location k99 WHERE $subquery) AS path") ;
}

注意:“o”别名用于主查询。
这段代码将允许我使用

{foreach .... as $appartment}
   {$appartment->path}
...

哪个打印:

Australia, Victoria, Melbourne, ...other children...

在D2中怎么做同样的事情?如何在我的symfony2项目中甚至包括教义扩展?

如果要在QueryBuilder中使用它,您必须:

1)添加DQL函数GroupConcat:GroupConcat

2)注册GroupConcat:DQL User Defined Functions

另一种方法是使用NativeQuery:Native SQL

在symfony2中注册一个函数DQL非常简单,只需在config.yml中添加GROUP_CONCAT,就像:

    entity_managers:
        default:
            dql:
                string_functions:
                    GROUP_CONCAT: YourBundle\Query\Mysql\GroupConcat

欲了解更多信息,请访问Registering Custom DQL Functions

翻译自:https://stackoverflow.com/questions/10850345/symfony2-how-to-use-group-concat-in-querybuilder

转载注明原文:symfony2:如何在QueryBuilder中使用group_concat