doctrine2和group_concat

gal*_*hen 4 php mysql group-concat doctrine-orm

我一直在浏览文档/谷歌,但没有找到任何解决方案.

有没有办法使用没有本机mysql的doctrine2(DQL)执行或模仿GROUP_CONCAT?

例如.:

SELECT u.id, u.name, [GROUP_CONCAT(...)] AS user_messages
FROM models\Users u
LEFT JOIN models\Messages m
GROUP BY u.id
Run Code Online (Sandbox Code Playgroud)

要得到

GROUP_CONCAT(m.id,'|',m.title SEPARATOR ':')
Run Code Online (Sandbox Code Playgroud)

现在我正在使用createNativeQuery()来运行它,但我正在寻找一个doctrine2解决方案.

提前致谢

Kee*_*ers 6

是的,这可以通过Beberlei(Doctrine2的核心开发人员)的DoctrineExtensions实现.在doctrine2中,您可以通过扩展functionNode类来定义自己的查询表达式.

最简单的方法是在项目中包含DoctrineExtensions lib.我不知道你使用Zend Framework或Symfony或任何其他框架,所以无法帮助你嵌入它.

您可以在此处查看DoctrineExtensions:

https://github.com/beberlei/DoctrineExtensions

和小组功能:

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

请注意,您应该像在MySQL中一样使用GroupConcat作为函数名而不是GROUP_CONCAT.

希望它能帮到你!