前提・実現したいこと
前提
Hypercandytextのチュートリアルを参考にlaravelでTodo webアプリを書かれているコードを貼り付けながら、作成して勉強をしています。
参考にしているチュートリアルでは、PostgresSQLを使用することが前提として書かれていますが、私はMySQlを使用しています。
実現したい事
テーブルでユーザーとフォルダを結びつけた仕様にして、
フォルダを作成をしたいのですが、下記のようにエラーが発生してしまう状況です。
発生している問題・エラーメッセージ
該当のソースコード
FolderController.php
public function create(CreateFolder $request) { // フォルダモデルのインスタンスを作成する $folder = new Folder(); // タイトルに入力値を代入する $folder->title = $request->title; // インスタンスの状態をデータベースに書き込む $folder->save(); return redirect()->route('tasks.index', [ 'id' => $folder->id, ]); } }
2020_09_14_133252_add_user_id_to_folders.php
public function up() { Schema::table('folders', function (Blueprint $table) { $table->bigInteger('user_id')->unsigned(); // 外部キーを設定する $table->foreign('user_id')->references('id')->on('users'); }); }
FoldersTableSeeder.php
<?php use Carbon\Carbon; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class FoldersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $user = DB::table('users')->first(); // ★ $titles = ['プライベート', '仕事', '旅行']; foreach ($titles as $title) { DB::table('folders')->insert([ 'title' => $title, 'user_id' => $user->id, // ★ 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), ]); } } }
試したこと
① URLの内容を参考に、'strict' => falseに変更
→下記のようにエラーが発生。
error
1SQLSTATE[2300]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`test2`.`folders`, CONSTRAINT `folders_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: insert into `folders` (`title`, `updated_at`, `created_at`) values (ccd, 2020-09-16 09:51:48, 2020-09-16 09:51:48))
②マイグレーションファイルに記述のinteger, incrementsをbigIncrements,bigIntegerに変更
→特にエラーは消えず。
③2020_09_14_133252_add_user_id_to_folders.phpのファイルの中のuserIDの定義にデフォルト値として、1を追加。
$table->bigInteger('user_id')->unsigned()->default(1);
→下記のようにエラーが発生。
error
1SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`test2`.`folders`, CONSTRAINT `folders_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: insert into `folders` (`title`, `updated_at`, `created_at`) values (ccd, 2020-09-16 10:28:01, 2020-09-16 10:28:01))
補足情報(FW/ツールのバージョンなど)
Laravel Framework 7.25.0
MySQL 8.0.21 Homebrew
PHP 7.4.8 (cli)
もし上記に記載されているコードのみで不足がある場合のため、私が書いたコードのGithubリンクを記載させていただきます。
参考にしたチュートリアルのURL
https://www.hypertextcandy.com/laravel-tutorial-authentication
mysql
1SHOW CREATE TABLE test2.users 2-------------- 3| Table | Create Table 4| users | CREATE TABLE `users` ( 5 `id` bigint unsigned NOT NULL AUTO_INCREMENT, 6 `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, 7 `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, 8 `email_verified_at` timestamp NULL DEFAULT NULL, 9 `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, 10 `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 11 `created_at` timestamp NULL DEFAULT NULL, 12 `updated_at` timestamp NULL DEFAULT NULL, 13 PRIMARY KEY (`id`), 14 UNIQUE KEY `users_email_unique` (`email`) 15) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 16
mysql
1SHOW CREATE TABLE test2.folders 2-------------- 3| Table | Create Table 4| folders | CREATE TABLE `folders` ( 5 `id` bigint unsigned NOT NULL AUTO_INCREMENT, 6 `title` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, 7 `created_at` timestamp NULL DEFAULT NULL, 8 `updated_at` timestamp NULL DEFAULT NULL, 9 `user_id` bigint unsigned NOT NULL, 10 PRIMARY KEY (`id`), 11 KEY `folders_user_id_foreign` (`user_id`), 12 CONSTRAINT `folders_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) 13) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 14
mysql
1SHOW CREATE TABLE test2.tasks 2-------------- 3| Table | Create Table 4| tasks | CREATE TABLE `tasks` ( 5 `id` bigint unsigned NOT NULL AUTO_INCREMENT, 6 `folder_id` bigint unsigned NOT NULL, 7 `title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, 8 `due_date` date NOT NULL, 9 `status` int NOT NULL DEFAULT '1', 10 `created_at` timestamp NULL DEFAULT NULL, 11 `updated_at` timestamp NULL DEFAULT NULL, 12 PRIMARY KEY (`id`), 13 KEY `tasks_folder_id_foreign` (`folder_id`), 14 CONSTRAINT `tasks_folder_id_foreign` FOREIGN KEY (`folder_id`) REFERENCES `folders` (`id`) 15) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 16
回答1件
あなたの回答
tips
プレビュー