[英]PHP: Laravel Cannot add foreign key constraint
I have files 2018_08_23_042408_create_roles_table.php 我有文件2018_08_23_042408_create_roles_table.php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateRolesTable extends Migration
{
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('role_name');
$table->string('description');
$table->timestamps();
});
}
public function down()
{
Schema::drop('roles');
}
}
and 2018_08_23_042521_create_users_table.php 和2018_08_23_042521_create_users_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('fullname');
$table->string('email')->unique();
$table->string('username')->unique();
$table->string('password');
$table->string('avatar_link');
$table->integer('role_id');
$table->foreign('role_id')->references('id')->on('roles');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::table('role_user', function (Blueprint $table) {
$table->dropForeign(['role_id']);
});
Schema::drop('users');
}
}
yet when I ran php artisan migrate I got this error 但是当我运行php artisan migration时,出现此错误
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key
constraint (SQL
: alter table `users` add constraint `users_role_id_foreign` foreign
key (`role_id`) references `roles` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
And when I ran php artisan:reset it always shows error like 'Base table exists' and I have to run php artisan tinker and Schema::drop('users') to fix that. 当我运行php artisan:reset时,它总是显示类似“基本表存在”的错误,我必须运行php artisan tinker和Schema :: drop('users')来解决此问题。 I have read similar question on stackoverflow but nothing worked. 我已经阅读了关于stackoverflow的类似问题,但没有任何效果。 Any insight of what caused this? 什么原因造成的任何见解? Thank you. 谢谢。
You have to use unsignedInteger to role_id, because it is unsinged int in your database (you use increments). 您必须将unsignedInteger用作role_id,因为它在数据库中是unsinged int的(使用增量)。 And then try to migrate. 然后尝试迁移。
$table->unsignedInteger('role_id');
just give unsigned
on role_id
. 只需在role_id
上提供unsigned
。 change 更改
$table->integer('role_id');
into 进入
$table->integer('role_id')->unsigned();
This is because the foreign key is unsigned integer. 这是因为外键是无符号整数。
For managing the foreign key
relationship two tables must have the same datatype column and the parent table column must be a primary key
or an index column
. 为了管理foreign key
关系,两个表必须具有相同的数据类型列,而父表列必须是primary key
或index column
。 In your case role_id
column is an integer and in users
table id
column is not an integer that's why the error is. 在您的情况下, role_id
列是整数,而在users
表中, id
列不是整数,这就是错误的原因。
So make these two column identical in terms of datatype
and try again. 因此,使这两列在datatype
方面相同,然后重试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.