2012-03-27 50 views
0

在误解我有一点学说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.' 

望着错误信息,存在丢失的“\”“模式”和“实体”之间。虽然这应该是'模型\实体',但它被'看作'模型 - 这肯定不存在 - 因此是错误。

出于某种奇怪的原因,斜杠在剥离代码之前就被剥离了,我想。问题是,我一直无法找到原因。我观察到,当WHEN子句从语句,像这样删除的问题消失:我试图逃跑可能不可见的控制字符

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

,检查线索在php.ini新的环境设置(例如)以什么可能是错误的原因。请帮忙,谢谢。

+0

如何使用交互式调试器找出它在原理库上发生的位置? – 2012-03-27 22:48:51

+0

如何为您的实体声明一个名称空间? (至少尝试一些东西),尝试在Clan类声明的顶部添加'namespace specialty \ modelsentities \ Clan'来查看会发生什么 – jere 2012-03-28 14:13:12

+0

@Keyne:我尝试使用xdebug,但无法追踪它。不确定在MVC应用程序上使用xDebug的最佳方式。谢谢 – 2012-03-28 14:31:02

回答

0

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

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

显然,的createQuery()的学说2.0的EntityManager类方法不是逃避这口井,当它遇到:

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

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

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

+0

你有没有试过双反斜杠,比如'blah \ models \\ entities \ blah'? – 2012-03-30 20:20:04

+0

@GuillaumePoussel:同样,使用反斜杠(我尝试过)不起作用。谢谢 – 2012-03-30 21:55:05

0

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

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

+0

我试过了,它仍然出现相同的错误信息。这太疯狂了! – 2012-03-29 14:36:45

+0

你可以发布你的映射? – 2012-03-29 17:58:37