wake-up-neo.net

Laravel: Liefert die ID von User :: create und fügt mit dieser ID eine neue Zeile ein

Ich habe AuthController in Laravel und ich habe 2 Tabellen, eine ist Users und eine ist Users_Information und ich möchte bei der Registrierung in Users_Information einfügen.

Ich möchte also die ID von der folgenden Methode abrufen, eine neue Zeile einfügen und die Spalten-ID dieser Zeile auf die ID des gerade erstellten Benutzers setzen.

 /**
     * 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 Spalten-ID, current_food und current_level einfügen

Ich habe einen Controller für die Users_Information namens UserInformation. Würde ich einfach UserInformation :: create aufrufen, aber wie bekomme ich die ID von User :: create?

13
TheGod39

Versuchen Sie, ->id des zurückgegebenen Objekts zu verwenden, etwa:

$id = $this->create($data)->id;
29
Alexey Mezenin

Die create()-Methode gibt das Modell zurück.

$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,
]);
14
Pawel Bieszczad

Eloquent hat eine nette Methode, um Speicherbeziehungen zu handhaben, die in Ihrem Fall verwendet werden können. Sie können damit ein verwandtes Modell speichern, ohne direkt auf das Modell zuzugreifen. Natürlich müssen Sie zuerst sicherstellen, dass Ihre Beziehung in den entsprechenden Modellen definiert ist.

Im Folgenden werden der Benutzer und seine Informationen erstellt. Ich nahm an, dass die Methode Ihrer Beziehung information genannt wurde, aber Sie können sie bei 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 user_id nicht explizit festgelegt haben, weil wir die Informationen einfach erstellt haben, indem Sie auf die von Ihnen definierte Beziehung zugreifen. Laravel/Eloquent übernimmt das für Sie!

5
camelCase

Wenn Sie Eloquent nicht verwenden, können Sie auch insertGetId verwenden:

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

use insertGetId (); Es gibt Ihnen die ID einer eingefügten Zeile.

$userId = User::insertGetId([
    'name' => $request->input('name'),
     'email' => $request->input('email'),
     'password' => bcrypt($request->input('password')),
]);

https://laravel.com/docs/5.7/queries#inserts

0
Abid Shah

Angenommen, ich habe einen Modellnamen Mitarbeiter und ich möchte einige Daten in dieses Modell einfügen, um auch die Tabellen-ID zu erhalten. So kann ich dies leicht mit folgendem Code erreichen:

 $employee = new Employee();
 $employee->employeeName = 'Something';
 $employee->save();
 $employee->id;
0
Md Shohag