1215 Не могу добавить внешний ключ - PullRequest
0 голосов
/ 03 декабря 2018

Larvel 5.6.3 PHP 7.2.10

Я получаю следующую ошибку для php artisan migrate:fresh

General error: 1215 Cannot add foreign key constraint (SQL: alter table `videos` add constraint `videos_video_identified_by_foreign` foreign key (`video_identified_by`) references `users` (`id`))

файла миграции таблицы пользователя -> 2014_10_12_000000_create_users_table файла миграции таблицы видео -> 2018_12_02_122553_create_videos_table

Обычно это происходит, когда родительская таблица не существует, и мы используем ее столбец в качестве внешнего ключа в нашей таблице, но, как видно, сначала следует создать таблицу пользователей, а затем таблицу видео.создан, то почему я получаю эту ошибку.

таблица пользователей

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('videos', function (Blueprint $table) {
    $table->increments('video_id');
    $table->text('video_link');
    $table->text('video_description');
    $table->string('video_category');
    $table->string('video_language');
    $table->unsignedInteger('video_identified_by');
    $table->timestamps();            
});

Schema::table('videos', function($table) {
    $table->foreign('video_identified_by')->references('id')->on('users');
});

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

ах вы вносите изменения в свой идентификатор в таблице видео попробуйте это

     Schema::create('videos', function (Blueprint $table) {
        $table->increments('id');
        $table->text('video_link');
        $table->text('video_description');
        $table->string('video_category');
        $table->string('video_language');
        $table->integer('video_identified_by')->unsigned();
        $table->foreign('video_identified_by')->references('id')->on('users')
          ->onUpdate('RESTRICT')->onDelete('CASCADE');   
        $table->timestamps();            
    });

    }
 public function down()
    {
        Schema::dropIfExists('videos');
    }
0 голосов
/ 04 декабря 2018

Добавить onDelete Cascade и изменить unsignedInteger на unsigned

Schema::create('videos', function (Blueprint $table) {
$table->increments('video_id');
$table->text('video_link');
$table->text('video_description');
$table->string('video_category');
$table->string('video_language');
$table->unsigned('video_identified_by');
$table->timestamps();            
});

Schema::table('videos', function($table) {
$table->foreign('video_identified_by')->references('id')->on('users')- 
>onDelete('cascade');
});
0 голосов
/ 03 декабря 2018

Привет, попробуйте, это нормально для меня

<?php
    $table->integer('video_identified_by')->unsigned();
    $table->foreign('video_identified_by')->references('id')->on('user')
          ->onUpdate('RESTRICT')->onDelete('CASCADE');      
?>

, затем php artisan migrate: refresh

...