Can anybody help me to solve this problem?
There are 3 tables with 2 foreign keys:
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); Schema::create('firms', function (Blueprint $table) { $table->increments('id'); $table->string('title')->nullable(); $table->integer('user_id')->unsigned()->nullable(); $table->foreign('user_id')->references('id')->on('users'); $table->timestamps(); }); Schema::create('jobs', function (Blueprint $table) { $table->increments('id'); $table->string('title')->nullable(); $table->integer('firm_id')->unsigned()->nullable(); $table->foreign('firm_id')->references('id')->on('firms'); $table->timestamps(); });
Error after running migration:
[IlluminateDatabaseQueryException] SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter ta ble `firms` add constraint `firms_user_id_foreign` foreign key (`user_id`) references `users` (`id`)) [PDOException] SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1` (errno: 150 "Foreign key constraint is incorrectly formed")
Advertisement
Answer
In case of foreign keys, the referenced and referencing fields must have exactly the same data type.
You create the id
fields in both users
and firms
as signed integers. However, you create both foreign keys as unsigned integers, therefore the creation of the keys fail.
You need to either add the unsigned
clause to the id
field definitions, or remove the unsigned
clause from the foreign key fields.