同时在Laravel中插入多对多关系的记录

4
我有三个表格:users、roles和role_user。我想使用Eloquent最少的查询语句向这些表格中插入记录。以下是我当前的插入代码:
User::create([
        'name' => 'admin',
        'email' => 'admin@test.pk',
        'password' => bcrypt('admin123'),
    ]);

    //create default roles while installation of application
    $roles = array(
        array('name' => 'admin', 'display_name' => 'Administrator User', 'description' => 'system admin user'),
        array('name' => 'registered', 'display_name' => 'Registered User', 'description' => 'free user')
    );
    foreach ($roles as $key => $role)
    {
        Role::create($role);
    }

    //relation between users and roles

    User::find(1)->roles()->attach(1);

在上面的代码中,我创建了一个用户,然后创建了两个角色,最后在pivot表(role_user)中插入记录。我想知道是否有其他方法可以在同一时刻使用一个Eloquent查询将记录插入这些表中?或者是否有其他更好的方法?

1个回答

1
很遗憾,无法同时在多个表中插入行。
我能想到的最好办法是:
$user = User::create([
            'name'     => 'admin',
            'email'    => 'admin@test.pk',
            'password' => bcrypt('admin123'),
        ]);

        //create default roles while installation of application
        $roles = [
            ['name' => 'admin', 'display_name' => 'Administrator User', 'description' => 'system admin user'],
            ['name' => 'registered', 'display_name' => 'Registered User', 'description' => 'free user']
        ];
        Role::insert($roles);

        //relation between users and roles
        $user->roles()->attach(1);

通过这个例子,您可以节省两个查询:

  1. Laravel 在插入角色时只调用一个 insert 查询,而不是两个;
  2. Laravel 不会从数据库中选择 User - 而是使用变量代替;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接