如果我正確理解問題,您想在註冊時爲用戶創建其他相關模型。這應該是非常簡單的 - 例如:
$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函數調用的創建方法。我將更詳細地編輯我的答案。 –