如果我正确理解问题,您想在注册时为用户创建其他相关模型。这应该是非常简单的 - 例如:
$user->userInfo()->save(UserInfo::create([
//whatever information you need to save to the userInfo table - if any
]));
至于放在哪里,您可以选择那里。你可以把它放在注册控制器上的'商店'方法。或者将其提取到服务类'RegisterUser',并在那里创建用户和userInfo。
类似:
//controller method
public function store(Request $request, RegisterUser $registerUser)
{
$user = $registerUser->handle($request);
return view(....)
}
//RegisterUser class
public function __construct(UserInfo $userInfo)
{
$this->userInfo = $userInfo;
}
public function handle($request)
{
// create your user
$user = .....
$user->userInfo()->save($this->userInfo->create([
.....
]));
// whatever else you need to do - send email, etc
return $user;
}
编辑:如果您使用Laravel 5和默认注册脚手架,那么你可以将代码添加到应用程序\ SERVICES \注册器类。这个类被trait中的postRegister方法调用。更改创建方法:
// app\Services\Registar
public function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$user->userInfo()->save($this->userInfo->create([
.....
]));
// whatever else you need to do - send email, etc
return $user;
}
如果使用Laravel 5.1,则注册器类不存在了,创建方法已被移动到AuthController(方法是一样的,只是在一个不同的位置),所以在那里覆盖它。
我还没有触及应用程序的初始脚手架,所以store方法是'AuthenticatesAndRegistersUsers'特性中的'postRegister'函数。上面提到的例子是合乎逻辑的,但我似乎无法将它放到'postRegister'函数中。 –
假设您使用Laravel 5(而不是5.1),则实际上可以将代码添加到app \ services \ Registar类中。它有一个由trait中的postRegister函数调用的创建方法。我将更详细地编辑我的答案。 –