web-dev-qa-db-fra.com

Laravel ajout de données au tableau croisé dynamique lors de l'insertion d'un nouvel enregistrement

J'ai trois tables,

roles(id, name);
users(id, email, password);
user_role(id, user_id, role_id);

Dans ce scénario, la table des utilisateurs est associée à la table des rôles avec une relation plusieurs à plusieurs.

J'ai deux modèles éloquents comme

Role
+users(){
    belongsToMany('User')
}

User
+roles(){
    belongsToMany('Role')
}

Maintenant, la question est de savoir quand je veux ajouter un nouvel utilisateur avec des identifiants de rôles que je voudrais attribuer aux utilisateurs. Comment puis-je insérer des valeurs dans le tableau croisé dynamique avec les meilleures pratiques Laravel?

Mon code existant est: -

$roles = Input::get('roles'); // arrays of role ids

$user = new User();
$user->username = Input::get('username');
$user->password = Hash::make(Input::get('password'));
$user->save();

Que faire ensuite???

20
Dipendra Gurung

C'est vraiment tout décrit dans la documentation .

Quoi qu'il en soit, voici comment vous le faites:

$user = new User();
$user->username = Input::get('username');
$user->password = Hash::make(Input::get('password'));
$user->save();
$user->roles()->attach($roles);

La partie importante est que vous devez enregistrer l'utilisateur avant d'attacher les rôles, car sinon l'utilisateur n'a pas encore d'identifiant à utiliser dans le tableau croisé dynamique.

19
lukasgeiter