Laravel 5.8 / Mysql: невозможно удалить или обновить родительскую строку, ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь настроить свои таблицы в базе данных MySQL, и в настоящее время я создаю файлы миграции, используя Laravel 5.8.Когда я запускаю новую миграцию с помощью

php artisan migrate

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

https://i.imgur.com/HIlR4i9.png

Однако, когда я хочу обновить свою базу данных с помощью

php artisan migrate: refresh

Я сталкиваюсь с этимошибка

Подсветка \ База данных \ QueryException: SQLSTATE [23000]: Нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (SQL: удалить таблицу, если существует services)

То, что я пробовал до сих пор:

Разделение моих внешних ключей в разных файлах миграции так, чтобы они приходили после моих таблиц, которые не имеют внешнихключи в них

Файловая архитектура в Visual Studio Код

File Architecture

добавление -> onDelete ('каскад') на каждом внешнем ключе в моих функциях up () (код ниже)

My Services миграционный файлe

class CreateServicesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('services', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->text('description');
            $table->integer('price');
            $table->boolean('multiple_times');
            $table->boolean('location');
            $table->integer('animal_type_id')->unsigned();
            $table->timestamps();
        });
    }

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

Мой AnimalType Внешний ключ

class ForeignKeyAnimalTypeServices extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('services', function($table){
            $table->foreign('animal_type_id')->references('id')->on('animal_types')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('services', function(Blueprint $table){
            $table->dropForeign(['animal_type_id']);
        });
    }
}

Мой Сервис Модель

class Service extends Model
{
    protected $table = 'services';
    protected $fillable = [
        'name', 'description', 'price', 'multiple_times', 'location'
    ];

    public function animalType()
    {
        return $this->belongsTo('App\AnimalType');
    }
}

Хотя мои миграциисозданы, я не могу обновить мои миграции, если мне нужно (или заполнить мой стол).Я хочу иметь возможность обновить мои файлы, не получая эту ошибку.Я все еще довольно новичок в программировании, мои извинения, если отсутствует информация.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

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

ALTER TABLE table drop FOREIGN KEY transaction_client_id_foreign;
0 голосов
/ 18 апреля 2019

В миграции Class ForeignKeyAnimalTypeServices

Попробуйте:

public function down()
    {
        Schema::disableForeignKeyConstraints();
        Schema::table('services', function(Blueprint $table){
            $table->dropForeign(['animal_type_id']);
        });

        Schema::dropIfExists('services');
        Schema::enableForeignKeyConstraints();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...