2013-10-08 34 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命令生成的。