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/registrator.php文件,我只是不知道如何解决这个问题。当前代码仅插入到用户表:Php Laravel 5-如何在用户注册时向多个表插入行,php,laravel-5,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/Se
/**
* 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']),
]);
}
谢谢
Christian如果您想做更多的事情,只需添加到刚才粘贴的create函数中即可
/**
* 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]);
你应该读一些有说服力的人际关系
因为您要组合这么多命令,所以我建议您阅读Laravel的作业/命令。他们在《拉威尔文献》中提到过
更新如何添加owner()方法。
Business.php模型:
/**
* Owners of the business.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function owners()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
/**
* Business this person owns.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function businesses()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
类似地,在Users.php模型中:
/**
* Owners of the business.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function owners()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
/**
* Business this person owns.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function businesses()
{
return $this->belongsToMany('App\User', 'userbusinesses');
}
然而,我的建议是与标准保持一致,并将pivot表重命名为business_user,在这种情况下,您不需要belongtomany中的第二个参数
还请注意,我将保存命令更改为同步。我第一次没有意识到这是多对多。谢谢Suhaib Malik。我复制了您的代码,但遇到以下错误:Builder.php行1999中的BadMethodCallException:调用未定义的方法Illumb\Database\Query\Builder::owner(),我已经了解了多对多关系,以及我物理创建的第三个(表)(UsersBusiness)。文档解释了透视表的概念,这就是我应该使用的吗?我是否需要实际声明我的第三个表?Thanks@user3489502您需要在模型中有一些方法,通过所有者关系将业务与用户联系起来。我更新了答案以反映这一点。是的,这是一个多对多的关系。在这种情况下,业务代表业务地点,用户是可以在许多不同地点工作的工人。太棒了,非常感谢,它成功了!!!丢失的但在同步之后。所以,如果我调用pivot表user\u business或business\u user,我就不需要将“userbusiness”作为belongtomany之后的第二个参数。拉威尔5块石头!再次感谢你的帮助@欢迎使用3489502!我已经修复了丢失的分号。