Когда я пытаюсь перенести свои таблицы в laravel, я продолжаю получать следующую ошибку

Я пытаюсь запустить php artisan migrate, но продолжаю получать следующую ошибку:

я попытался откатить таблицы и снова перенести их, но это просто дает мне ту же ошибку

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_post_id_foreign` foreign key (`post_id`) references `posts` (`id`) on delete cascade)

Вот моя таблица create_comments_table:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCommentsTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->id();
        $table->mediumText('body');
        $table->string('email');
        $table->string('name');
        $table->boolean('approved');
        $table->integer('post_id')->unsigned();
        $table->timestamps();

    });

    Schema::table('comments', function ($table) {
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropforeign(['post_id']);
    Schema::dropIfExists('comments');
}
}

Вот моя таблица create_posts_table:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->mediumText('body');
        $table->string('name');
        $table->timestamps();
    });
}

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

И мои таблицы миграции создаются в следующем порядке:

create users table
create passwords 
create failed jobs
create posts 
create comments

Как я могу это исправить?


person es915    schedule 18.12.2020    source источник
comment
Отвечает ли это на ваш вопрос? Ошибка MySQL 1215: невозможно добавить ограничение внешнего ключа   -  person Dan    schedule 18.12.2020
comment
Это связано с тем, что идентификатор таблицы сообщений не является целым числом или таблица сообщений еще не создана.   -  person MrEduar    schedule 18.12.2020


Ответы (1)


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCommentsTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->id();
        $table->mediumText('body');
        $table->string('email');
        $table->string('name');
        $table->boolean('approved');
        $table->integer('post_id')->unsigned();
        $table->timestamps();
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    });
}

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

Попробуйте обновить комментарий, перенесите файл следующим образом.

person HEL Mab    schedule 18.12.2020
comment
Да, извините, я забыл изменить это выше. Даже когда я меняю его на сообщения, он все равно выдает мне ошибку - person es915; 18.12.2020
comment
Пожалуйста, попробуйте обновить файл переноса комментариев, как я упоминал - person HEL Mab; 18.12.2020
comment
И убедитесь, что таблица сообщений должна быть создана перед таблицей комментариев. - person HEL Mab; 18.12.2020
comment
когда я запускаю php artisan migrate, я думаю, что только моя таблица create_comments_table, если миграция начинается с этой таблицы, и если я удаляю таблицу и снова запускаю команду, она ничего не говорит о переносе, даже когда я откатываюсь. может в этом проблема? - person es915; 18.12.2020
comment
Да, это была проблема, :D, но если вы обновите то, что я упомянул выше, и попытаетесь запустить php artisan migrate:fresh, я думаю, это должно сработать. - person HEL Mab; 18.12.2020
comment
Хорошо, отлично, что сработало, спасибо за помощь. - person es915; 18.12.2020