作为doctrine2 and group_concat的后续问题,我一直在尝试将beberlei中的GroupConcat用户定义函数添加到我的项目中,但没有成功。我尝试使用offical procedure,但我使用带有注释引用的Doctrine 2,所以我没有config.yaml文件。我偶然发现了this procedure,这看起来很简单,但是当我尝试在DQL查询中使用它时,仍然无法识别该函数。这是错误:
Doctrine\ORM\Query\QueryException: [Syntax Error] line 0, col 49: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got 'GroupConcat' in C:\xampp\htdocs\MTG\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php on line 44
更新:
我意识到从一个设置到另一个设置的过程可能非常不同。就我而言,自从我第一次使用the tutorial安装Doctrine以来,我必须将这些内容放在我的bootstrap.php
文件中。这是我到目前为止所做的:
1)使用composer安装DoctrineExtensions。
2)将以下内容添加到我的bootstrap.php文件中以加载类:
Doctrine\Common\ClassLoader
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', realpath(__DIR__.'/vendor/beberlei/DoctrineExtensions/lib'));
$classLoader->register();
3)更改我的bootstrap.php文件以定义函数:
$config->addCustomStringFunction('GroupConcat', 'DoctrineExtensions\Query\MySql\GroupConcat');
不幸的是,它仍然不起作用。我试图找出班级是否实际加载。
答案 0 :(得分:0)
事实证明,在正确修改我的bootstrap.php
文件后,我仍然无法使该功能正常工作。经过一番摆弄后,我发现虽然我的查询仍无效,但做函数使用此表单:
$results = $s->select("GroupConcat(t.name) As Name")->from("Type","t")->getQuery()->getResult();
因此,毕竟,我的问题在于使用GroupConcat的DQL语法。