当用户注册时,如何将行插入多个表.
我有基本的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文件,我只是不知道如何解决这个问题.当前代码仅插入到users表:
/**
* 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']),
]);
}
Run Code Online (Sandbox Code Playgroud)
谢谢Christian
如果你想做更多,就像添加你刚刚粘贴的创建功能一样简单.
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
对于倒数第二部分:
$business->owners()->sync([$user->id]);
Run Code Online (Sandbox Code Playgroud)
你应该在这里阅读有关雄辩的关系.
因为你把这么多命令放在一起,我建议你阅读Laravel的Jobs/Commands.它们在Laravel文档的" 队列"部分中提到.
有关如何添加owner()方法的更新.
Business.php模型:
/**
* Owners of the business.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function owners()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
Run Code Online (Sandbox Code Playgroud)
同样在您的Users.php模型中:
/**
* Business this person owns.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function businesses()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
Run Code Online (Sandbox Code Playgroud)
但是,我的建议是保持内联标准并将您的数据透视表重命名为business_user,在这种情况下,您不需要belongsToMany中的第二个参数.
另请注意,我更改了保存为同步的命令.我没有意识到这是第一次多对多.