0

私は 53 個のテーブルを持っており、それらの多くはリレーションシップで相互に参照しています。私が実行すると:

php app/console doctrine:schema:create

最大ネスト レベル 100 に達しましたというエラーが表示されます。調査の結果、これは実際には xdebug による無限ループを停止するためのセキュリティ対策であることがわかりました。この制限を削除してコマンドを再度実行すると、php cli が機能しなくなり、強制的に閉じられます。

データベース構造を構築してから戻ってマッピングとインデックスを追加し、失敗しないようにするなどの手順でスキーマを生成する方法はありますか?

それとも、私が何か他のことをしている可能性はありますか?

MySQL は機能し、この同じ方法を使用して、テーブルや関係が少ないスキーマを作成できます。

更新: 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
4

2 に答える 2

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ハングするかどうかも試してください。

本当に汚い回避策:

新しいカーネル環境 (つまり、step1、step2) を定義したり、さまざまなマッピングを作成したり (ますます詳細になる)、最初の "steps"/environments でそれらのいくつかのみを手動で構成したり、config_stepx.yml でそれらを登録/オーバーライドして使用したりできます。何かのようなもの

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

…が、それは本当に面倒です。

私の経験から、コマンドは大規模なデータセットでも機能するはずです。100 を超えるテーブルを持つアプリケーションのスキーマを問題なく作成しました。

于 2013-10-08T20:47:52.110 に答える