特定のテーブルだけマイグレート
テーブルの作り直し作業が発生したため、マイグレーションファイルを修正後、マイグレートのやり直し。
マイグレーションの確認
$ php artisan migrate:status +------+-------------------------------------------------------+-------+ | Ran? | Migration | Batch | +------+-------------------------------------------------------+-------+ | Yes | 2019_12_14_000001_create_personal_access_tokens_table | 1 | | Yes | 2022_04_03_051357_create_areas_table | 1 | | Yes | 2022_04_03_051532_create_expeditions_table | 1 | | Yes | 2022_04_03_071904_create_expedition_trigers | 1 | +------+-------------------------------------------------------+-------+
マイグレーションファイルの実行
$ php artisan migrate:refresh --step=1 --path=/database/migrations/2022_04_03_071904_create_expedition_trigers.php Rolling back: 2022_04_03_071904_create_expedition_trigers Rolled back: 2022_04_03_071904_create_expedition_trigers (76.64ms) Migrating: 2022_04_03_071904_create_expedition_trigers Migrated: 2022_04_03_071904_create_expedition_trigers (211.42ms)
特定のテーブルだけシーダー
しかし、この後seedした結果シーダーの実行
$ php artisan db:seed --class=ExpeditionTrigerSeeder Illuminate\Database\QueryException SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`kancolle`.`expedition_trigers`, CONSTRAINT `expedition_trigers_parent_exp_id_foreign` FOREIGN KEY (`parent_exp_id`) REFERENCES `expeditions` (`exp_id`)) (SQL: insert into `expedition_trigers` (`exp_id`, `parent_exp_id`) values (8, A2), (A1, A3), (A2, A3), (24, A4), (A4, A5), (B3, A6), (A5, A6), (B4, A7)) at vendor/laravel/framework/src/Illuminate/Database/Connection.php:716 ・ ・と出てしまう。 MySQLで作成したテーブルのSQLを見てみると。
> SHOW CREATE TABLE expedition_trigers; +--------------------+----- | Table | Create Table | +--------------------+------------------ | expedition_trigers | CREATE TABLE `expedition_trigers` ( `expedition_triger_id` int unsigned NOT NULL AUTO_INCREMENT, `parent_exp_id` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `exp_id` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`expedition_triger_id`), KEY `expedition_trigers_parent_exp_id_foreign` (`parent_exp_id`), KEY `expedition_trigers_exp_id_foreign` (`exp_id`), CONSTRAINT `expedition_trigers_exp_id_foreign` FOREIGN KEY (`exp_id`) REFERENCES `expeditions` (`exp_id`), CONSTRAINT `expedition_trigers_parent_exp_id_foreign` FOREIGN KEY (`parent_exp_id`) REFERENCES `expeditions` (`exp_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |修正時に消した外部キーが追加されてしまっている。
既存のマイグレーションファイルを削除して作成し直す事で解決。
深くは考えずそういうものなのだという事で、、
テーブルはMYSQLで手動で削除。
マイグレーションファイルの作成
$ php artisan make:migration expedition_trigers Created Migration: 2022_04_08_211941_expedition_trigers
マイグレーションファイルの実行
$ php artisan migrate:refresh --step=1 --path=/database/migrations/2022_04_08_211941_expedition_trigers.php Migration not found: 2022_04_03_071904_create_expedition_trigers Migrating: 2022_04_08_211941_expedition_trigers Migrated: 2022_04_08_211941_expedition_trigers (31.00ms)
シーダーの実行
$ php artisan db:seed --class=ExpeditionTrigerSeeder Database seeding completed successfully.