База данных отката Laravel 5.2 с внешним ключом - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь откатить свою базу данных, но у меня появляется эта ошибка:

[Illuminate \ Database \ QueryException] SQLSTATE [23000]: нарушение ограничения целостности: 1217 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено (SQL: отбрасываемая таблица tb_levels)

[PDOException] SQLSTATE [23000]: нарушение ограничения целостности: 1217 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено

это мой миграционный код:

public function up()
{
    Schema::disableForeignKeyConstraints();

    Schema::create('tb_users', function (Blueprint $table) {
        $table->engine = 'InnoDB';

        $table->increments('id_user');
        $table->string('name');
        $table->string('username');
        $table->string('email')->unique();
        $table->integer('id_level')->unsigned();
        $table->string('password', 60);
        $table->rememberToken();
        $table->boolean('activated')->default(false);
        $table->timestamps();

        $table->foreign('id_level')->references('id_level')->on('tb_levels');
    });

    Schema::enableForeignKeyConstraints();
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::disableForeignKeyConstraints();
    Schema::table('tb_users', function(Blueprint $table){
        $table->dropForeign('tb_users_id_level_foreign');
        $table->dropColumn('id_level');
    });
    Schema::drop('tb_users');
    Schema::enableForeignKeyConstraints();
}

Я пробовал несколько способов, которые я нашел на этом форуме, но все еще получаю эту ошибку, любая помощь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Ну, наконец-то я нашел способ решить эту ошибку,

Прежде всего вам нужно выполнить миграцию, чтобы удалить внешний ключ и столбец, это код:

public function up()
{
    Schema::disableForeignKeyConstraints();

    Schema::table('tb_users', function(Blueprint $table){
        $table->dropForeign('tb_users_id_level_foreign');
        $table->dropColumn('id_level');
    });

    Schema::enableForeignKeyConstraints();
}

Затем перенесите его, после этого будет удален столбец и внешний ключ.

После этого удалите код Schema :: table , сохраните его и выполните команду:

php artisan migrate:reset

Ну, это работает, но это действительно непрактичный способ,

Надеюсь, что там был более легкий путь, чем этот.

0 голосов
/ 25 апреля 2018

Сначала отключите внешний ключ, используя это:

SET FOREIGN_KEY_CHECKS = 1;

SET GLOBAL FOREIGN_KEY_CHECKS = 1;

А затем перенесите базу данных.

Снова применить ограничение внешнего ключа:

SET FOREIGN_KEY_CHECKS = 0;

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

...