2016-09-02 13 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']), 
     ])); 
    } 

、私はUserテーブルのために、関連するテーブルにデータを追加するには、この方法を拡張する必要があります。このために私が実行します。この後

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。ただし、return文にattach()を追加し、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列を持っていると仮定しました。

関連する問題