symfony doctrine:build-schemaエラー(不明な関係エイリアスtable_name)を解決する方法
質問
このsymfonyエラーを解決する方法:
C:\inetpub\wwwroot\project\trunk\preprod\signup>php symfony doctrine:build-schema --trace
>> doctrine generating yaml schema from database
[sfException]
Unknown relation alias table_name
Exception trace:
at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\cli\sfDoctrineCli.class.php:69
sfDoctrineCli->notifyException at C:\inetpub\wwwroot\ project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\ven
dor\doctrine\Doctrine\Cli.php:93
Doctrine_Cli->run at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\task\sfDoctrineB
aseTask.class.php:112
sfDoctrineBaseTask->callDoctrineCli at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\li
b\task\sfDoctrineBuildSchemaTask.class.php:57
sfDoctrineBuildSchemaTask->execute at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\task\sfBaseTask.class.php:63
sfBaseTask->doRun at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\task\sfTask.class.php:77
sfTask->runFromCLI at C:\inetpub\wwwroot\ project\trunk\preprod\signup\lib\vendor\symfony\lib\command\sfSymfonyCommandApplication.class.ph
p:76
sfSymfonyCommandApplication->run at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\command\cli.php:20
include at C:\inetpub\wwwroot\project\trunk\preprod\signup\symfony:14
解決
モデルとキャッシュの問題です(すべての構成をリセットし、モデルとデータファイルを消去します)
rm config/doctrine/schema.yml
rm -r cache/*
rm -r data/*
rm -r lib/model/doctrine/base
symfony cc
2番目の応答を見つけました。builder.phpパッチを使用して、symfony 1.2のDoctrineオブジェクトゲッターにこのエラーをキャストさせました。
他のヒント
Symfony 1.4で作業している人は、時代遅れのドクトリンモデルをきれいにするタスクがあることを喜んで知るでしょう。 " ./ symfony doctrine:clean"これらの厄介な「モデルがもう存在しない問題」を取り除きます。
テーブルの1つが 'table_name'と呼ばれる別のテーブルを参照しているようです(Doctrineのエラー出力の置換に恐ろしい問題がない限り)。この問題を解決するために、すべてのテーブルのリレーションをチェックして、これを引き起こしている犯人を見つけ、有効でない場合はリレーションを削除します(実際には「table_name」というテーブルがありますか?)。
テーブルが多数ある場合は、データベース全体を一時的なテストDBにレプリケートしてから、テーブルの半分を削除して、生成コマンドを再度実行してください。エラーが発生しない場合は、テーブルのチャンクが問題ではないことがわかっているため、既存のテーブルを削除して残りの半分を復元します。それでも同じエラーが発生する場合、犯人は現在のチャンク内にいます。エラーが1つだけテーブルに残り、エラーソースが見つかるまで、半分をドロップし続けます。
問題の正確な原因を突き止めるのにまだ問題がある場合は、SQLで問題テーブルの構造と、使用しているDoctrineのバージョンを提供できます。