【问题标题】:Insert record Many to Many relation in laravel at same time同时在laravel中插入记录多对多关系
【发布时间】:2016-04-05 11:49:46
【问题描述】:

我有三个表用户、角色和角色用户,我想使用 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) 中插入记录。我想知道有没有其他方法可以通过一个雄辩的查询同时在这些表上插入记录或者还有其他更好的方法吗?

【问题讨论】:

    标签: php mysql laravel eloquent many-to-many


    【解决方案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 - 而是使用变量;

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2012-11-23
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多