我怎样才能避免在这个为多对多关系创建的Laravel播种机中重复?

8yparm6h  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(106)

我正在Laravel 8中开发一个博客应用程序。
应用程序为用户提供角色和权限。角色和权限之间存在 * 多对多 * 关系。对于 * 播种roles_permissions表 *,我有一个RolesPermissionsSeeder播种器:

class RolesPermissionsSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      RolesPermissions::create([
        'role_id' => '1',
        'permission_id' => '7',
      ]);

      RolesPermissions::create([
        'role_id' => '2',
        'permission_id' => '1',
      ]);

      RolesPermissions::create([
        'role_id' => '2',
        'permission_id' => '2',
      ]);

      RolesPermissions::create([
        'role_id' => '2',
        'permission_id' => '3',
      ]);
    }
}

问题在于,

从上面可以看出,这段代码出现了3次,并做了一些细微的修改:

RolesPermissions::create([
    'role_id' => '2',
    'permission_id' => '1',
]);

用这个代替为我工作:

RolesPermissions::create([
    'role_id' => '2',
    'permission_id' => [1, 2, 3],
]);

问题

为 * 每个role_id * 使用 * 一个 * create语句的最简单方法是什么?

20jt8wwn

20jt8wwn1#

您可以使用

$permissions = [1, 2, 3];
foreach ($permissions as $permission) {
    RolesPermissions::create([
        'role_id' => '2',
        'permission_id' => $permission,
    ]);
}

或者

$permissions = [1, 2, 3];
$role = Role::find(2);
$role->permissions()->saveMany($permissions);
    • 编辑**

要在没有updated_atcreated_at的情况下更新,请使用insert()

$permissions = [1, 2, 3];
foreach ($permissions as $permission) {
    DB::table('roles_permissions')->insert([
        'role_id' => '2',
        'permission_id' => $permission,
    ]);
}
zf9nrax1

zf9nrax12#

RolesPermissions::factory(['role_id' => '2'])
    ->count(3)
    ->sequence(
        ['permission_id' => 1],
        ['permission_id' => 2],
        ['permission_id' => 3],
    )
    ->create();

相关问题