2016-05-06 30 views
7

Ho AuthController in Laravel e ho 2 tabelle, una è Users e una è Users_Information e voglio inserirlo in Users_Information al momento della registrazione.Laravel: Ottieni l'ID dell'utente :: crea e inserisci una nuova riga usando quell'ID

Quindi voglio ottenere l'id dal seguente metodo e inserire una nuova riga e impostare l'ID della colonna di tale riga sull'ID dell'utente che ho appena creato.

/** 
    * 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']), 
     ]); 
    } 

voglio inserire in Users_Information con una colonna id, current_food e current_level

Ho un controller per l'Users_Information chiamato Userinformation, dovrei chiamare Userinformation :: create ma come vorrei avere l'id dall'utente :: creare?

risposta

12

tenta di utilizzare ->id di oggetto restituito, qualcosa di simile a:

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

questo ha funzionato, grazie tanto. –

7

Il metodo create() restituisce il modello.

$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, 
]); 
+0

Il metodo create() restituisce il modello --- questo ha aiutato – partho

2

Eloquente ha un bel modo per gestire saving relationships, che può essere utilizzato nel vostro caso. Permette di salvare un modello correlato senza accedere direttamente al modello. Ovviamente devi assicurarti che la tua relazione sia definita prima nei modelli appropriati.

Di seguito verrà creato l'utente e le relative informazioni. Ho ipotizzato che il metodo della tua relazione fosse chiamato information ma è possibile regolarlo in base alle esigenze.

$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 
]); 

Si noti che non abbiamo impostato in modo esplicito user_id perché semplicemente creato le informazioni accedendo al rapporto che avete definito; Laravel/Eloquent lo gestisce per te!

1

Inoltre, se non si utilizza Eloquente, è possibile utilizzare insertGetId:

$id = DB::table('users')->insertGetId(
    [ 'name' => 'John Doe', 'email' => '[email protected]'] 
);