在 laravel 中迁移 运行 时出现意外错误(table 不存在)
Unexpected error ( table doesn't exist ) when run migration in laravel
我有很多迁移要迁移,我的数据库现在是空的。
当我 运行 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
我可以做什么来迁移我的表??
当您有服务提供商查询权限时,通常会出现这个问题,通常是为了设置授权门。每次启动应用程序(包括在控制台中)时都会启动服务提供程序。当数据库为空时没有table查询。
如果您出于授权目的执行此查询,则在控制台中 运行ning 时可能不需要执行此操作,因为没有网络请求传入。如果您愿意,可以尝试让你正在做的事情成为有条件的 try 而不是 运行 if 运行ning 在控制台中;在服务提供商中:
if (! $this->app->runningInConsole()) {
// not running in console
}
我有很多迁移要迁移,我的数据库现在是空的。
当我 运行 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
我可以做什么来迁移我的表??
当您有服务提供商查询权限时,通常会出现这个问题,通常是为了设置授权门。每次启动应用程序(包括在控制台中)时都会启动服务提供程序。当数据库为空时没有table查询。
如果您出于授权目的执行此查询,则在控制台中 运行ning 时可能不需要执行此操作,因为没有网络请求传入。如果您愿意,可以尝试让你正在做的事情成为有条件的 try 而不是 运行 if 运行ning 在控制台中;在服务提供商中:
if (! $this->app->runningInConsole()) {
// not running in console
}