2016-05-06 4 views
7

Ich habe AuthController in Laravel und ich habe 2 Tabellen, eine ist Benutzer und man ist Users_Information und ich möchte in Users_Information bei der Registrierung einfügen.Laravel: Holen Sie sich die ID des Benutzers :: erstellen und fügen Sie neue Zeile mit dieser ID

Also ich möchte die ID von der folgenden Methode abrufen und eine neue Zeile einfügen und legen Sie die Spalte ID dieser Zeile auf die ID des Benutzers, den ich gerade erstellt habe.

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

Ich möchte in Users_Information mit einer Spalte ID einfügen, current_food und current_level

ich einen Controller für die Users_Information haben UserInformation genannt, würde ich UserInformation einfach anrufen :: schaffen, aber wie würde ich die ID erhalten vom Benutzer :: erstellen?

Antwort

12

Versuchen ->id von zurückgegebene Objekt zu verwenden, so etwas wie:

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

Das funktionierte, Vielen Dank. –

7

Das create() Methode das Modell zurückgibt.

$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

Die create() -Methode gibt das Modell zurück --- das half – partho

2

Eloquent hat eine nette Art und Weise saving relationships, zu handhaben, die in Ihrem Fall verwendet werden können. Sie können damit ein zugehöriges Modell speichern, ohne direkt auf das Modell zugreifen zu müssen. Natürlich müssen Sie sicherstellen, dass Ihre Beziehung in den entsprechenden Modellen definiert ist.

Im Folgenden wird der Benutzer und ihre Informationen erstellt. Ich nahm an, dass die Methode Ihrer Beziehung information genannt wurde, aber Sie können nach Bedarf anpassen.

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

Beachten Sie, dass wir nicht explizit user_id gesetzt haben, weil wir einfach die Informationen erstellt, indem die Beziehung Zugriff Sie definiert haben; Laravel/Eloquent behandelt das für Sie!

1

Auch, wenn Sie nicht mit Eloquent sind, können Sie insertGetId verwenden:

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