Я не могу мигрировать, что мне делать (laravel -5.8)? SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа - PullRequest
0 голосов
/ 24 марта 2020
  • 1. Почему я не могу мигрировать?

    Я хотел создать таблицу разрешений ролей, но я не могу добавить внешний ключ, я получил эту ошибку: SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа

  • Я пытался мигрировать, но получил некоторые ошибки

  • Я не знаю, что мне делать в laravel 5.8

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateRoleAndPermissionTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
    
            Schema::create('roles', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('title')->nullable();
                $table->timestamps();
            });
    
            Schema::create('permissions', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('title')->nullable();
                $table->timestamps();
            });
    
    
            **Schema::create('role_user', function (Blueprint $table) {
                $table->integer('role_id')->unsigned();
                $table->integer('user_id')->unsigned();
    
                $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
    
                $table->primary(['role_id','user_id']);
    
            });
    

2.это просто перенести верхние таблицы, не будет ли переносить эту таблицу?

          Schema::create('permission_role', function (Blueprint $table) {


                $table->integer('permission_id')->unsigned();
                $table->integer('role_id')->unsigned();


                $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
                $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');

                 $table->primary(['permission_id','role_id']);  
            });
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('role_and_permission');
        }
    }

1 Ответ

0 голосов
/ 24 марта 2020

Прокомментируйте или удалите все $table->foreign('') из всей миграции. Это будет работать.

Лучшее решение - использовать $table->bigIncrements('') на primary key вместо $table->increments('') и $table->unsignedBigInteger(''); для foreign keys вместо $table->integer('');.

Потому что Laravel 5.8 использует $table->bigIncrements('') для primary key и $table->unsignedBigInteger(''); для foreign keys.

...