2016-11-28 16 views
5

私はLaravel Authを使用してユーザーを登録できます。私が現在しようとしているのは、ユーザーが登録した後(特別な役割が選択されている場合)、関連するユーザーIDを保持している別のテーブル(ユーザー)に挿入された行があります。これは、そのためのコードです:Laravelは最新のユーザーIDを取得します

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Validator; 
use Illuminate\Foundation\Auth\RegistersUsers; 
use App\Complaint; 


class RegisterController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Register Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users as well as their 
    | validation and creation. By default this controller uses a trait to 
    | provide this functionality without requiring any additional code. 
    | 
    */ 

    use RegistersUsers; 

    /** 
    * Where to redirect users after login/registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|min:6|confirmed', 
      'username' => 'required|unique:users', 
      'role' => 'required' 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 

     $user = new User; 
     $user->name = $data['name']; 
     $user->email = $data['email']; 
     $user->username = $data['username']; 
     $user->password = bcrypt($data['password']); 
     $user->role = $data['role']; 
     $user->templateURL = ""; 

     /*$user = User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'username' => $data['username'], 
      'password' => bcrypt($data['password']), 
      'role' => $data['role'], 
      'templateURL' => "" 
     ]);*/ 

     $user->save(); 


     if($data['role'] == 'Verkäufer'){ 
      $complaintRow = Complaint::create([ 
       'user_id' => $user->id, 
       'complaintCount' => 0 
      ]); 
     } 


     switch($data['role']){ 
      case 'Käufer': 
       $user->attachRole(2); 
       break; 
      case 'Verkäufer': 
       $user->attachRole(3); 
       break; 
      default: 
       $user->attachRole(2); 
       break; 
     } 


     return $user; 
    } 
} 

しかし、それは正しく動作していない、ユーザーが苦情の行と同様に挿入され、何とか$user->idがNULLであるように思わ、列は常に0からuser_idセットを持っています。なぜこれがこのようなものになるのでしょうか?

EDIT:私はそれが今働いてしまった...それは実際に私は投稿のコードではなかった、私は常に0が0ので、そこにいた理由です、complaintテーブルにuser_idフィールド充填可能にしませんでしたデフォルト値だったので、設定しなかっただけです。

どうもありがとうございました。

答えて

0

これを試してみてください:

$lastId = User::create($userData)->id; 
0

$user->idあなたが右のsave()メソッドを使用した後、ユーザーのIDを作成しました教えてくれます。

2

Laravel Eloquent ORMによると、$user->idはユーザーのIDを返します。 nullを取得している場合は、保存時にエラーが発生する可能性があります。 (https://stackoverflow.com/a/21084888/6628079

保存してから$userを印刷してみてください。

更新: ユーザーが正常に保存されていれば、クレームテーブルにデータを追加する方が良いでしょう。

protected function create(array $data) 
{ 

    $user = new User; 
    $user->name = $data['name']; 
    $user->email = $data['email']; 
    $user->username = $data['username']; 
    $user->password = bcrypt($data['password']); 
    $user->role = $data['role']; 
    $user->templateURL = ""; 

    /*$user = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'username' => $data['username'], 
     'password' => bcrypt($data['password']), 
     'role' => $data['role'], 
     'templateURL' => "" 
    ]);*/ 

    if ($user->save()) { 
     if ($data['role'] == 'Verkäufer') { 
      $complaintRow = Complaint::create([ 
       'user_id' => $user->id, 
       'complaintCount' => 0 
      ]); 
     } 


     switch ($data['role']) { 
      case 'Käufer': 
       $user->attachRole(2); 
       break; 
      case 'Verkäufer': 
       $user->attachRole(3); 
       break; 
      default: 
       $user->attachRole(2); 
       break; 
     } 


     return $user; 
    } else { 
     // Your code if user doesn't save successfully. 
    } 
} 
1

Eloquentは方法boolではなく、新しく作成されたエンティティのインスタンスを保存するためです。 https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html

したがって、新しく作成されたインスタンスを取得するには、ユーザー作成メソッドか、新たに挿入されたインスタンスを取得するための別のクエリを作成できます。最初の方が簡単です。ここではあなたがそれを行うことができる方法である。

$user = User::create([ 
    'name' => $data['name'], 
    'email' => $data['email'], 
    'username' => $data['username'], 
    'password' => bcrypt($data['password']), 
    'role' => $data['role'], 
    'templateURL' => "" 
]); 

さて、あなたはUserインスタンスを含む$user変数を持っています。しかし、これを行うには、あなたのモデルに記入可能な/悩まされている問題を考慮する必要があります。

protected $fillabe = ['name', 'email', 'username', 'password', 'role', 'templateURL'] 
+0

ええ、私は提供されたコードでコメントアウトしたコードのthats、これは同じ問題で終わるを助ける – nameless

+0

しかし、どういうわけか、記入式が助けたことを願っています私は問題を解決するために(たとえそれが 'User'モデルについてではなかったとしても、 – nameless

1

が列idが存在します:私は意味、あなたのモデルでは、次の行を追加する必要がありますか? $primaryKey = 'id'をモデル(ユーザー)に設定してください。 $user->save

あなたのテーブルから最大IDを取得するために $user->id好きか$user->save試した後idにアクセスすることができます。

$user = User::select('id')->max('id')->first(); 
0

あなたはちょうどあなたが保存ユーザーオブジェクトのとき、それはこれだけ、そのオブジェクトを取得し、furcher条件での使用保存されたユーザーオブジェクトを返します

、変更する必要があるすべての最も正しいをしました。

$saved_user = $user->save(); 

if(!empty($saved_user)){ 
     if($data['role'] == 'Verkäufer') 
     { 
        $complaintRow = Complaint::create([ 
         'user_id' => $saved_user->id, 
         'complaintCount' => 0 
        ]); 
       } 
    } else { 
    throw new error(500); 

} 

これは...ありがとう:)

+0

不幸なことに、私は結果として0を得ます... – nameless

+0

@nameless $ saved_userの条件が満たされればラップしようとします。 IDを取得するのではなく、ユーザーを保存する際にエラーが発生する可能性があります。 –

+0

@namelessデータベーステーブル構造を表示してください。 –

関連する問題