#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
}