Laravel 5 - 如何在用户注册时向多个表插入行

时间:2015-06-26 20:00:22

标签: php laravel-5

当用户注册时,如何将行插入多个表。

我有基本的Laravel用户表。我还有一个企业表(id,business_name)和一个usersbusinesses表(id,user_id,business_id)

首先,我需要创建(db insert)用户并获取其生成的id值。

然后,我需要创建(db insert)业务并获取其生成的id值。

最后,我需要使用上面的值(user_id和business_id)在usersbusinesses表中创建(db insert)行

我知道我将不得不修改app / Services / Registrar.php文件,我只是不知道如何解决这个问题。当前代码仅插入用户表:

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return User
 */
public function create(array $data)
{
    return User::create([
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}

由于 基督教

1 个答案:

答案 0 :(得分:5)

如果您想要做更多事情,只需添加到刚刚粘贴的创建功能即可。

/**
 * Create a new user instance after a valid registration and do more.
 *
 * @param  array  $data
 * @return User
 */
public function create(array $data)
{
    $user = User::create([
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

    $business = Business::create([
        'name' => 'best business ever'
    ]);

    $business->owners()->sync([$user->id]);

    return $user;

}

对于倒数第二部分:

$business->owners()->sync([$user->id]);

您应该阅读有关雄辩关系的here

因为您要将这么多命令放在一起,我建议您阅读Laravel的Jobs / Commands。他们在Laravel文档的Queues section中提到过。

有关如何添加owner()方法的更新。

Business.php模型:

/**
 * Owners of the business.
 * 
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function owners()
{
    return $this->belongsToMany('App\User', 'userbusinesses');
}

同样在您的Users.php模型中:

/**
 * Business this person owns.
 * 
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function businesses()
{
    return $this->belongsToMany('App\User', 'userbusinesses');
}

但是,我的建议是保持内联标准并将您的数据透视表重命名为business_user,在这种情况下,您不需要belongsToMany中的第二个参数。

另请注意,我更改了保存为同步的命令。我第一次没有意识到它是多对多的。

相关问题