web-dev-qa-db-fra.com

Laravel: Obtenir l'ID de User :: create et insérer une nouvelle ligne en utilisant cet ID

J'ai AuthController à Laravel et j'ai 2 tables, l'une est Utilisateurs et l'autre Utilisateurs_Information et je veux insérer dans Utilisateurs_Informations lors de l'enregistrement.

Je souhaite donc obtenir l'ID de la méthode suivante, insérer une nouvelle ligne et définir l'ID de colonne de cette ligne sur l'ID de l'utilisateur que je viens de créer.

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

Je veux insérer dans Users_Information avec un identifiant de colonne, current_food et current_level

J'ai un contrôleur pour User_Information appelé UserInformation, pourrais-je simplement appeler UserInformation :: create, mais comment puis-je obtenir l'ID de User :: create?

13
TheGod39

Essayez d'utiliser ->id de l'objet retourné, quelque chose comme:

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

La méthode create() renvoie le modèle.

$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 a un moyen agréable de gérer sauver des relations , qui peuvent être utilisées dans votre cas. Il vous permet de sauvegarder un modèle associé sans accéder directement au modèle. Bien sûr, vous devez vous assurer que votre relation est définie en premier dans les modèles appropriés.

Ci-dessous va créer l'utilisateur et leurs informations. J'ai supposé que la méthode de votre relation s'appelait information mais vous pouvez ajuster si nécessaire.

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

Notez que nous n'avons pas explicitement défini user_id car nous avons simplement créé les informations en accédant à la relation que vous avez définie. Laravel/Eloquent s'en charge pour vous!

5
camelCase

De plus, si vous n'utilisez pas Eloquent, vous pouvez utiliser insertGetId:

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

utilisez insertGetId (); il vous donne l'id d'une ligne insérée.

$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