Неожиданная ошибка (таблица не существует) при запуске миграции в laravel

#php #laravel #laravel-7

#php #laravel #laravel-7

Вопрос:

Мне нужно перенести много миграций, и моя база данных сейчас пуста.

При запуске php artisan migrate я получил эту ошибку :

 PDOException::("SQLSTATE[42S02]: Base table or view not found: 1146 Table 'shop.permissions' doesn't 
exist")
  

И это моя миграция разрешений :

 Schema::create('permissions', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('label')->nullable();
        $table->timestamps();
    });

    Schema::create('permission_user', function (Blueprint $table) {
        $table->unsignedBigInteger('permission_id');
        $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->primary(['permission_id', 'user_id']);
    });

    Schema::create('roles', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('label')->nullable();
        $table->timestamps();
    });

    Schema::create('permission_role', function (Blueprint $table) {
        $table->unsignedBigInteger('permission_id');
        $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
        $table->unsignedBigInteger('role_id');
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->primary(['permission_id', 'role_id']);
    });

    Schema::create('role_user', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->unsignedBigInteger('role_id');
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->primary(['user_id', 'role_id']);
    });
  

Когда я создаю руководство по разрешениям в своей базе данных и запускаю php artisan migrate , оно работает без этой ошибки, но после некоторой миграции я получил эту ошибку :

 SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'permissions' already exists
  

Что я могу сделать для переноса моих таблиц??

Комментарии:

1. похоже, у вас есть поставщик услуг, который по какой-то причине выполняет запрос для сбора разрешений… когда база данных пуста, для нее нет таблицы для запроса

2. точно, у меня есть запрос в моем AuthServiceProvider, и я комментирую это и запускаю миграцию, ее работу, благодарю, добавляю свой комментарий в ответ

Ответ №1:

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

Если вы выполняете этот запрос с целью авторизации, возможно, вам не нужно делать это при запуске в консоли, поскольку веб-запрос не поступает. Если вы хотите, вы можете попробовать сделать все, что вы делаете, условным, чтобы попытаться не запускать, если выполняется в консоли; у поставщика услуг:

 if (! $this->app->runningInConsole()) {
    // not running in console
}