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

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

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

我有基本的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文件,我只是不知道如何解决这个问题。当前代码仅插入到用户表:

/**
 * 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!我已经修复了丢失的分号。