2013-08-18 26 views
0

作为doctrine2 and group_concat的后续问题,我一直试图将GroupConcat用户自定义函数beberlei添加到我的项目中,但没有成功。我尝试过使用offical procedure,但我使用了带有注释引用的Doctrine 2,所以我没有config.yaml文件。我偶然发现了this procedure,这似乎很简单,但是当我尝试在DQL查询中使用它时,该函数仍然无法识别。这里的错误:在Doctrine 2中添加用户自定义函数时遇到问题

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 

UPDATE:

我意识到,程序可以从一个设置到另一个很大的不同。就我而言,由于我第一次使用the tutorial安装了Doctrine,所以我必须将这些东西放入我的bootstrap.php文件中。这是我到目前为止所做的:

1)使用作曲家安装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

为什么你手动管理你的供应商文件夹,而不让作曲家做呢? – Flip

+0

我没有使用作曲家,因为我第一次将它与教义一起安装,我忘记了它的存在。我删除了整个事情,并开始了关于作曲家的教条+扩展。感谢您的提醒。 –

回答

0

事实证明,在正确修改我的bootstrap.php文件后,我仍然无法使该功能正常工作。一些摆弄后,我发现,而我的查询仍然不能正常工作,使用这种形式的功能工作:

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

所以,毕竟,我的问题,使用GroupConcat驻留在DQL语法。

相关问题