Answer. The problem is that you have the company table reference the branch and contact table before they are created. You have to create the contact table first but without the foreign id reference to bid, then create branch table and then company table.
A foreign key is a field that is used to establish the relationship between two tables via the primary key (You can also use a non-primary field but not recommended). In this tutorial, I show how you can add a foreign key constraint while creating a table using migration in the Laravel 8 project.
The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables. A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in another table.
Since increments()
creates an unsigned integer column, you need to define the foreign key column as unsigned integer too.
Default migrations in Laravel 6+ use bigIncrements()
, so you need to use unsignedBigInteger()
method:
$table->unsignedBigInteger('order_id');
https://laravel.com/docs/6.x/migrations#foreign-key-constraints
For default migrations in older versions of Laravel use unsignedInteger()
method:
$table->unsignedInteger('order_id');
Or:
$table->integer('order_id')->unsigned();
https://laravel.com/docs/5.5/migrations#foreign-key-constraints
the foreign key must be an "unsignedBigInteger" and it will be fixed, something like this:
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
Primary key and foreign key should be in the same data type.
If the primary key is using unsigned big_integer
, the foreign key should also be using unsigned big_integer
.
In case laravel 5.8 uses bigIncrements
by default when generating new migration (see this pull request), you should make sure that your foreign key
is also unsigned big_integer
or you will get error.
Table users
:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
...
}
Table orders
:
Schema::create('orders', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
...
$table->foreign('user_id')->references('id')->on('users');
}
Hope this helps.
I was also getting the same error. What i was doing in users table is,
$table->unsignedInteger('role_id')->default(2);
table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
But i have created the role table after creating users table. So, i edited the role migration file name date before the users table filename date. Like this,
2013_01_22_091213_create_roles_table.php
2014_10_12_000000_create_users_table.php
And finally it works. Maybe sometime you may get this problem. So, i posted it.
Laravel 5.8.3 comes with
$table->bigIncrements('id');
change it to
$table->increments('id');
$table->integer('order_id')->unsigned();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With