一対多のアソーシエーションを組むためのmigrationfileを作成したいのですが、エラーが発生し、解決ができません。
【補足】UserテーブルのIDをRecipeテーブルの【user_id】カラムへ保存したいと考えております。
エラー内容
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `recipes` add constraint `recipes_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade) at /Applications/MAMP/htdocs/test1/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664 660| // If an exception occurs when attempting to run a query, we'll format the error 661| // message to include the bindings with SQL, which will make this exception a 662| // lot more helpful to the developer instead of just the database's errors. 663| catch (Exception $e) { > 664| throw new QueryException( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| } 668| Exception trace: 1 PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint") /Applications/MAMP/htdocs/test1/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458 2 PDOStatement::execute() /Applications/MAMP/htdocs/test1/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458
Recipeの migrationfile の記述
//2021_02_07_060223_create_recipes_table.php class CreateRecipesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('recipes', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedInteger('user_id'); //カラム追加 $table->foreign('user_id') //外部キー制約 ->references('id')->on('users') //usersテーブルのidを参照する ->onDelete('cascade'); //ユーザーが削除されたら紐付くpostsも削除 $table->string('title'); $table->unsignedBigInteger('category_id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('recipes'); } }
Usermigrationfile
class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('profile'); $table->string('image'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }
##仮説と仮説を確認するための問題点
仮説 :
参照元, 参照先のキーの型が異なったために発生したエラーの可能性があるため、キーを見比べて異なるようであれば、キーを変更する必要がある。 参考サイト
問題 :
MAMP環境でmysqlのテーブルを確認する方法がわからない
$ mysql -u root //mysqlへ接続 mysql> show create table users \G; ERROR 1046 (3D000): No database selected ERROR: No query specified mysql> SHOW DATABASES; // test1というデータベースがない。 mysql> USE test1; ERROR 1049 (42000): Unknown database 'test1'
データベース
test1という名前で存在していますが、ターミナルからは確認ができません。
おそらくMAMP環境を用いているためかと思います。
どのような手順で問題を解決すれば良いかアドバイスをいただきたいです。
また、もっといい方法があれば、ご教授いただけますと幸いです。どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー