Ошибка ограничения добавления внешнего ключа в миграции laravel - PullRequest
0 голосов
/ 30 марта 2020

Я написал миграцию в laravel, но когда я запустил эту миграцию, я получил следующую ошибку

> SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
> (SQL: alter table `campaign_notifications` add constraint `campaign  
>       _notifications_campaign_id_foreign` foreign key (`campaign_id`) references `campaigns` (`id`) on delete cascade)

Мой код миграции

    Schema::create('campaign_notifications', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('campaign_id')->index();
        $table->string('user_uuid')->nullable();
        $table->string('post_id')->default(0);
        $table->tinyInteger('is_opened')->default(0);
        $table->tinyInteger('sent')->default(0);
        $table->string('payload')->nullable();
        $table->string('failed_type')->nullable();
        $table->timestamps();
        $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');
 });

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Сначала убедитесь, что у вас уже есть таблица campaign в вашей БД (посмотрите на временные метки ваших миграций), чтобы вы могли ссылаться на таблицу в вашей текущей миграции. В основном, чтобы эта миграция работала, вам нужна таблица кампании в вашей базе данных, после этой миграции вы не можете запустить миграцию таблицы campaign.

Кроме того, измените campaign_id на целое число без знака

$table->unsignedInteger('campaign_id'); $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');

1 голос
/ 30 марта 2020

Ваш код миграции будет выглядеть так:

Schema::create('campaign_notifications', function (Blueprint $table) {
        $table->increments('id');
        $table->string('user_uuid')->nullable();
        $table->string('post_id')->default(0);
        $table->tinyInteger('is_opened')->default(0);
        $table->tinyInteger('sent')->default(0);
        $table->string('payload')->nullable();
        $table->string('failed_type')->nullable();
        $table->bigInteger('campaign_id')->unsigned();
        $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');
        $table->index('campaign_id');
        $table->timestamps();
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...