当用户注册时,如何将行插入多个表。
我有基本的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']),
]);
}
由于 基督教
答案 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中的第二个参数。
另请注意,我更改了保存为同步的命令。我第一次没有意识到它是多对多的。