ホームページ > 記事 > PHPフレームワーク > Laravel の移行でよくあるエラーの概要
Laravel の次のチュートリアル コラムでは、laravel 移行の初心者向けに、よくある間違いと解決策をいくつか紹介します。
まえがき
最近、断続的にlaravelを勉強し始めたのですが、簡単なアドレス帳システムを作成して、テーブルを2つ用意したいと思っています。支店用と連絡先用です。移行ファイルを作成する際、よく考えずに最初に連絡先テーブルを作成してしまいました。連絡先テーブルにはブランチの ID に接続された外部キーがありました。その結果、移行コマンドを実行すると、次のエラーが発生しました:[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contac ts_branch_id_foreign` foreign key (`branch_id`) references `branches` (`id`) on delete cascade) [PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint当初の疑い テーブル作成の異常が原因だったので、ブランチの移行ファイル名の日付を手動で修正して
php artisan migrate:resetを実行したところ、
[ErrorException] include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progressというエラーが発生しました。
failed to open Stream errorsolution
more storage/logs/laravel.logでエラーが表示される段落を見つけます:
[2016-09-29 18:05:35] local.ERROR: exception 'ErrorException' with message 'include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress' in /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php:412 Stack trace: #0 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'include(/Users/...', '/Users/Ade/www/...', 412, Array) #1 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Composer\Autoload\includeFile() #2 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(301): Composer\Autoload\includeFile('/Users/Ade/www/...') #3 [internal function]: Composer\Autoload\ClassLoader->loadClass('CreateBranchesT...') #4 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(335): spl_autoload_call('CreateBranchesT...') #5 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(227): Illuminate\Database\Migrations\Migrator->resolve('2016_09_12_1728...') #6 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(206): Illuminate\Database\Migrations\Migrator->runDown(Object(stdClass), false)エラーは ClassLoader.php ファイルの 412 行目に表示されます
resolve('2016_09_12_1728...') です。ログに表示される名前は、変更したブランチの移行ファイルの名前です。
mdfind 2014_10_12_000000_create_users_table.php|grep phonebook通常の移行ファイルが表示される場所が 3 か所あることがわかります。 1箇所に登場しました。
autoload_static.php ファイルを調整します
'CreateBranchesTable' => __DIR__ .,名前を変更したときだったと思いますが、PHP Storm が自動的にすべての削除を手伝ってくれました。このファイル内のブランチ ファイル パスが失われています。あとは追加するだけです。
通常の移行ファイル名の設定を参照して、次の行を追加します。
'CreateBranchesTable' => __DIR__ . '/../..' . '/database/migrations/2016_09_12_172822_create_branches_table.php',
autoload_classmap.php ファイルを調整します
# #autoload_classmap.php ファイルで、ブランチのパス名が変更前のパスのままであることがわかりました。
'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_29_172822_create_branches_table.php',
これを
'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_12_172822_create_branches_table.php',
に変更し、移行コマンド
php artisan migrate:reset# を実行します。
##OK、先ほどのエラーは解消されましたが、連絡先テーブルがロールバックされていないことがわかりました。
Sequell Pro を介してデータベースに接続して表示します
連絡先テーブルが次のことを行っていることがわかります。存在しますが、移行テーブルにコンテンツがありません。前の移行を再度実行する必要があります。 コマンド中にエラーが発生し、連絡先の実行レコードが移行テーブルに書き込まれませんでした。移行コマンドを再実行して試してみます。まず、これら 2 つのテーブルを手動で削除します。つまり、データベースをクリアしてから、次を実行します。
php artisan migratecontacts テーブルの作成時のエラーを無視し、Sequential Pro を更新して、次のことを確認します。
案の定、移行テーブルには連絡先の作成記録がありません。そのため、リセットの実行時に連絡先のロールバック操作は行われません。
移行コマンドを実行したので、もう一度始めましょう。この最初のエラーを見てください:
[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contacts_branch_id_foreign` foreign key (`branch_id`) references `br anches` (`id`) on update cascade) [PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint落ち着いて分析してください。プロンプトは SQL エラーであるため、この SQL ステートメントを Sequential Pro で手動で実行することもできます。
案の定、実行によりエラーが返されました。
ステートメントを注意深く確認してください。エラーはありません。最初に考えられるのは、branch_id 型の宣言と、branch テーブルの ID 型の不一致が原因であると考えられます。連絡先の構造を確認し、Unsigned にチェックが入っていないことを確認し、SQL 文を実行して外部キーを追加すると成功します。
找到问题原因后,我们就清空数据库,修改 contacts 的 migration 文件,调整 branch_id 为:
$table->integer('branch_id')->unsigned()->comment('机构ID');
再重新执行 migrate 命令,成功!
相关推荐:最新的五个Laravel视频教程
以上がLaravel の移行でよくあるエラーの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。