php - 同时在laravel中插入记录多对多关系

标签 php mysql laravel eloquent many-to-many

我有三个表 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 table(role_user) 中插入记录。我想知道有没有其他方法可以通过一个 Eloquent 查询同时在这些表中插入记录或者还有其他更好的方法吗?

最佳答案

遗憾的是,无法同时在多个表中插入行。

我能想到的最好的是:

$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 - 而是使用变量;

关于php - 同时在laravel中插入记录多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36425589/

相关文章:

php - 如何通过多个id从多个表中执行选择

MySQL:维恩图的高效计算集合幂

php - 如何使用 PHP Laravel 从 Outlook API 下载附件?

json - 如何将 Laravel 5.4 与 Angular 4 集成

php - 使用 UUID 作为 Laravel 5 的主键

php - 在网络上显示 iPhone 照片时尊重 EXIF 方向

php - 即使在使用 mysqli_real_escape_string 之后,数据库也不允许特殊字符

php - 根据颜色查找表减少图像颜色(不包括透明)

MySQL、json、JSON_ARRAY_APPEND - 为什么 append 在 5.7.13 上不起作用?

mysql - 从数据库表中删除用户帐户权限