无法在Doctrine 2中添加用户定义的功能

时间:2013-08-18 16:53:36

标签: php mysql doctrine-orm

作为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');

不幸的是,它仍然不起作用。我试图找出班级是否实际加载。

1 个答案:

答案 0 :(得分:0)

事实证明,在正确修改我的bootstrap.php文件后,我仍然无法使该功能正常工作。经过一番摆弄后,我发现虽然我的查询仍无效,但函数使用此表单:

$results = $s->select("GroupConcat(t.name) As Name")->from("Type","t")->getQuery()->getResult();

因此,毕竟,我的问题在于使用GroupConcat的DQL语法。