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

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

php artisan migrate

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

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

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

php artisan migrate:refresh

я столкнулся с этой ошибкой

Illuminate\Database\QueryException : SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (SQL: drop table if exists services)

Что я пробовал до сих пор:

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

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

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

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

Мой файл миграции Услуги

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');
    }
}

Мой внешний ключ Тип животных

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');
    }
}

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
3 682
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В миграции Class ForeignKeyAnimalTypeServices

Пытаться:

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

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

    }

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

ALTER TABLE table drop FOREIGN KEY transaction_client_id_foreign;

Другие вопросы по теме