简体   繁体   English

PHP:Laravel无法添加外键约束

[英]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 keyindex 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM