php - Laravel 重新播种表格

标签 php laravel laravel-permission

在 Laravel 中,如何重新播种数据库?不会丢失现有数据/迁移?

我有一个带有 Spatie 权限包的 RoleAndPermissionSeeder.php:

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;

class RoleAndPermissionSeeder extends Seeder
{
    public function run()
    {
        // Reset cached roles and permissions
        app()[PermissionRegistrar::class]->forgetCachedPermissions();

        $permissions = [
            'articles create',
            'articles delete',
            'articles read',
            'articles update',
            'dashboard read',
        ];

        foreach ($permissions as $permission) {
            Permission::create(['name' => $permission]);
        }
        // =======================================================================

        $admin = Role::create(['name' => 'admin']);
        $member = Role::create(['name' => 'member']);
        Role::create(['name' => 'super-admin']);

        // =======================================================================

        $admin_permissions = [
            'articles read',
            'dashboard read',
        ];

        $member_permissions = [
            'dashboard read',
        ];

        $admin->syncPermissions($admin_permissions);
        $member->syncPermissions($member_permissions);
    }
}

为博客创建新的迁移后,我添加了额外的权限来读取、更新博客等。我如何重新播种此文件以便添加新权限?

最佳答案

如果您的播种器类具有 firstOrCreate 而不是 create

foreach ($permissions as $permission) {
    Permission::firstOrCreate(['name' => $permission]);
}
// =======================================================================
$admin = Role::firstOrCreate(['name' => 'admin']);
$member = Role::firstOrCreate(['name' => 'member']);
Role::firstOrCreate(['name' => 'super-admin']);

它不会重复数据。如果 syncPermissions 在后台使用 sync,那么这应该不是问题。

只要不删除表,就不会丢失任何数据。

关于php - Laravel 重新播种表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70956756/

相关文章:

php - jqGrid 自定义编辑对话框

php - 为许多记录批量插入 laravel

php - 如何获取所有记录并在右侧显示信息。取决于数据库中的值

laravel - 我如何获得 updated_at 和 created_at

php - Laravel-Permission - 在 artisan 列表中找不到权限 - "permission"命名空间中没有定义命令

php - 如何在ajax中添加加载效果

java - POST 请求在 cURL 中成功,但在 Java 中失败

php - 如何在 spatie 权限包中列出所有具有权限的角色?

laravel - 如何在 spatie/laravel-permission 中删除用户的所有角色

javascript - JavaScript 中的 PHP 转义