2016-05-06 8 views
7

私はLaravelにAuthControllerを持っています。私は2つのテーブルを持っています.1つはUsers、もう1つはUsers_Informationで、登録時にUsers_Informationに挿入します。Laravel:User :: IDを取得してそのIDを使用して新しい行を挿入します

次のメソッドからIDを取得し、新しい行を挿入し、その行の列IDを、作成したばかりのユーザーのIDに設定します。

/** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'username' => $data['username'] . ' ' . $data['username2'], 
      'mail' => $data['mail'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 

私はちょうどユーザ情報を呼び出すと、私はユーザ情報と呼ばれるUsers_Informationするためのコントローラを持って列ID、current_foodとcurrent_level

でUsers_Informationに挿入したい::作成しても、どのように私は、IDを取得しますユーザー::作成?

$id = $this->create($data)->id; 

答えて

12

は返されたオブジェクト、のようなものの->idを使用してみてください。

$user = User::create([ 
    'username' => $data['username'] . ' ' . $data['username2'], 
    'mail' => $data['mail'], 
    'password' => bcrypt($data['password']), 
]); 

$userInfo = UserInformation::create([ 
    'user_id' => $user->id, 
    'current_food' => $food, 
    'current_level' => $level, 
]); 
+1

これは、そんなに感謝を働きました。 –

7

create()方法は、モデルを返します。

+0

create()メソッドはモデルを返します---これは助けになりました – partho

2

雄弁は、あなたの場合にも使用することができるsaving relationshipsを、処理するための良い方法があります。モデルに直接アクセスせずに関連モデルを保存することができます。もちろん、適切なモデルで関係が定義されていることを確認する必要があります。

以下に、ユーザーとその情報を作成します。私はあなたの関係の方法がinformationと呼ばれると仮定しましたが、必要に応じて調整することができます。我々は、単にあなたが定義した関係にアクセスして情報を作成したので、我々は、明示的にuser_idを設定しなかった

$user = User::create([ 
    'username' => $data['username'] . ' ' . $data['username2'], 
    'mail' => $data['mail'], 
    'password' => bcrypt($data['password']), 
])->information()->create([ 
    'current_food' => $current_food, 
    'current_level' => $current_level 
]); 

お知らせ。 Laravel/Eloquentがあなたのためにそれを処理します!

1

あなたが雄弁を使用していない場合も、あなたはinsertGetIdを使用することができます。

$id = DB::table('users')->insertGetId(
    [ 'name' => 'John Doe', 'email' => '[email protected]'] 
); 
関連する問題