2016-09-02 101 views
1

我使用Laravel 5.3中的標準機制身份驗證是通過命令構建的:php artisan make:auth如何將數據添加到Auth Laravel中的相關表中?

所以,它創造了控制器RegisterController以下方法:

protected function create(array $data) 
    { 

     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ])); 
    } 

所以,我需要延長這種方法將數據添加到相關的表用戶表。爲此,我做的事:

protected function create(array $data) 
    { 

     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ])->roles()->attach(Role::where('name', "admin"))->first()); 
    } 

在此之後,我得到錯誤:

FatalThrowableError in SessionGuard.php line 441: 
Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in \vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 32 

回答

3

我沒有使用Laravel的身份驗證邏輯,但它看起來像用戶獲取正確的登錄他們創建後。要記錄在用戶需要Laravel用戶對象,因此:

return User::create([ 
    'name' => $data['name'], 
    'email' => $data['email'], 
    'password' => bcrypt($data['password']), 
]); 

create()方法returnsModel。但是,您將attach()添加到return語句中,並且如果您查看API,則方法returnsvoid最終轉換爲錯誤消息中提到的null

你想要做什麼,是這樣的:

protected function create(array $data) { 

    // Create the User and store the object 
    $newUser = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

    // Add extra data 
    $adminRole = Role::where('name', 'like', 'admin')->first(); 
    $newUser->roles()->attach($adminRole->id); 

    // Return the new User object 
    return $newUser; 
} 

注:我假設你有你的role(s)表中的列id

相關問題