0

我有一些像这样的 Doctrine ORM 代码:

$query = $this->entityManager->createQuery('SELECT c FROM specialty\models\entities\Clan c WHERE c.Id = ?1');

这段代码多年来一直没有问题。我最近重新安装了我的 LAMP 堆栈环境和我的 Netbeans IDE,只是从 SVN 中检查了代码。但是,现在这段代码引发了以下错误:

exception 'Doctrine\ORM\Query\QueryException' with message '[Semantical Error] line 0, col 14 near 'specialty\modelsentities\Clan': Error: Class 'specialty\modelsentities\Clan' is not defined here.'

查看错误消息,“模型”和“实体”之间缺少“\”。虽然这应该是“\models\entities”,但它被“视为”为“\modelsentities”——它肯定不存在——因此出现错误。

出于某种奇怪的原因,我认为在解析代码之前将斜杠去掉。问题是,我一直无法找到造成这种情况的原因。我观察到,当从语句中删除 WHEN 子句时,问题就消失了,如下所示:

$query = $this->entityManager->createQuery('SELECT c FROM specialty\models\entities\Clan c');

我尝试转义可能不可见的控制字符,检查 php.ini 中的新环境设置(例如)以寻找可能导致错误的线索。请帮忙,谢谢。

4

2 回答 2

0

你有自动代理生成吗?如果是这样,请尝试将其关闭并手动重新生成代理。

如果您已经关闭了自动代理生成,只需尝试重新生成代理,看看是否有帮助。

于 2012-03-29T07:17:08.240 回答
0

问题是因为我在重新安装期间安装了 PHP 5.4 版。根据 PHP 网站,在 5.4 版本中引入了一个新的控制/转义字符

\e  escape (ESC or 0x1B (27) in ASCII) (since PHP 5.4.0)

显然,Doctrine 2.0 的 entitymanager 类中的 createQuery() 方法在遇到以下情况时并没有很好地转义:

blah\models\entities\blah[包含新的转义字符]

我之前的版本是 5.3.10 版本,它没有新引入的转义字符。

解决方案是恢复到 PHP 5.3。不确定升级到 Doctrine 2.1 或更高版本是否也能解决问题。

于 2012-03-30T20:15:42.123 回答