2012-03-27 48 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