2013-10-08 35 views
0

我有53個表,並且他們中的很多人都用關係引用了彼此。當我運行時:Symfony 2.3.5從文件failes創建數據庫模式

php app/console doctrine:schema:create 

我得到的錯誤最大嵌套級別達到100。通過研究,我發現這實際上是一個從xdebug到停止無限循環的安全措施。當我刪除這個限制並再次運行該命令時,php cli停止工作,我不得不關閉它。

有沒有辦法像生成數據庫結構一樣在步驟中生成模式,然後返回並添加映射和索引以使其不失敗?

或者我有可能做其他的事情嗎?

MySQL確實有效,我可以使用這種方法創建具有較少表/關係的模式。

UPDATE: doctrine:schema:create --dump-sql也會掛起。最大嵌套級別和最大執行時間都設置爲無限制。不過PHP CLI停止工作:

Problem signature: 
Problem Event Name: APPCRASH 
Application Name: php.exe 
Application Version: 5.3.26.0 
Application Timestamp: 51af706d 
Fault Module Name: ntdll.dll 
Fault Module Version: 6.1.7601.17725 
Fault Module Timestamp: 4ec49b8f 
Exception Code: c00000fd 
Exception Offset: 0002e8fb 
OS Version: 6.1.7601.2.1.0.256.48 
Locale ID: 1033 
Additional Information 1: 8983 
Additional Information 2: 898375922a25a99ebc5721487ed92891 
Additional Information 3: f337 
Additional Information 4: f3378ae3d6023e7f336317eca89ba0b7 

回答

1

你必須增加xdebug.max_nesting_level在php.ini的值(默認爲100)來規避maximum nesting level of 100 reached錯誤。

例如,在高速緩存預熱期間,您很可能會多次遇到此問題,而不僅僅是在嘗試創建數據庫模式時。因此,增加您的所有symfony開發的價值 - 同樣適用於magento和zf ...

檢查max_execution_time設置也可能檢查使用探查器(xdebug/xhprof)如果命令似乎掛起。創建模式可能需要一些時間,請耐心等待:)

doctrine:schema:create命令沒有用於「拆分」操作的選項。

嘗試如果doctrine:schema:create --dump-sql掛起。

一個非常骯髒的解決方法:

您可以定義新的內核環境(即第一步,第二步),建立不同的映射(獲得更多,更詳細)或手動配置只是其中的幾個第一「步驟「/環境,在config_stepx.yml中註冊/覆蓋它們並使用類似於

doctrine:schema:create --env=step1 
doctrine:schema:update --env=step2 
... 

......但那真的是一團糟。

從我的經驗來看,即使對於大型數據集,該命令也應該可以工作。我創建了具有> 100個表格的應用程序的模式,沒有任何問題。

+0

我將最大嵌套級別設置爲0 =無限制,並且因爲命令是從cli運行的,所以默認max_execution_time爲0 =無限制。仍然php.exe停止響應並失敗。從時間的角度來看,使用你的骯髒的解決方法並不是真正可行的,但是在每個實體中都有太多引用表的引用,這些引用問題的原因幾乎是積極的。 – Chausser

0

答案是我的實體在被用作主鍵的同一個鍵上自引用一對一關係。從而在創建過程中創建一個無限循環。

不知道爲什麼它首先出現在其中,其中一些是由doctrine database reverse engineering命令生成的。