2015-08-15 145 views
1

我做的擴展建立在對用戶模型幼蟲5. 我想做到的是,一旦用戶註冊並通過驗證我想ANOTHER數據庫表中創建一個名爲USERINFO這與用戶模型具有屬於關係,並且用戶模型與userInfo具有hasOne關係。Laravel創建用戶信息數據庫表時,用戶註冊

兩件事。 如何成功實現這一邏輯。我讀 http://laravel.com/docs/master/eloquent-relationships#inserting-related-modelshttp://laravel.com/docs/5.1/events#registering-events-and-listeners

但是我不肯定

其次。 我最好在哪裏實現這個邏輯。

在此先感謝

PS。我不會結合這兩個數據庫,因爲用戶模型是在註冊時生存在userInfo中的數據是「可選的」,以便用戶填充後進行身份驗證。

回答

2

如果我正確理解問題,您想在註冊時爲用戶創建其他相關模型。這應該是非常簡單的 - 例如:

$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(方法是一樣的,只是在一個不同的位置),所以在那裏覆蓋它。

+0

我還沒有觸及應用程序的初始腳手架,所以store方法是'AuthenticatesAndRegistersUsers'特性中的'postRegister'函數。上面提到的例子是合乎邏輯的,但我似乎無法將它放到'postRegister'函數中。 –

+0

假設您使用Laravel 5(而不是5.1),則實際上可以將代碼添加到app \ services \ Registar類中。它有一個由trait中的postRegister函數調用的創建方法。我將更詳細地編輯我的答案。 –

0

你的答案指出我在正確的方向,但我對你編輯的問題做了一些簡單的tweek。

$user->userInfo()->firstOrCreate([ 
'aboutMe' => 'Please Fill out so users can know about you', 
'bodyType' => '--', 
]); 
return $user;