我有一个名为“位置”的嵌套集(使用 Gedmo 树)实体。实体“公寓”具有 location_id 以及我需要做什么来映射称为“路径”的标量值以返回所有公寓的查询。
在 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)添加SQL函数Group_Concat:组连接 https://github.com/beberlei/DoctrineExtensions/blob/master/src/Query/Mysql/GroupConcat.php
2)注册GroupConcat:DQL 用户定义函数 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html
另一种选择是使用 NativeQuery :原生 SQL http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html
在 symfony2 中注册函数 DQL 非常简单,只需在 config.yml 中添加 GROUP_CONCAT 即可,如下所示:
entity_managers:
default:
dql:
string_functions:
GROUP_CONCAT: YourBundle\Query\Mysql\GroupConcat
欲了解更多信息,请访问注册自定义 DQL 函数 http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)