2017-09-24 2 views
0

J'ai la table 'rôle' avec les champs user_id et role_id.J'ai obtenu la nouvelle valeur de l'autre requête 154,516 de la boucle for.Je veux vérifier 154 est dans le rôle table id_utilisateur si ne pas quitter insérer le nouveau champ ou si existant mettre à jour le champ.Dans mon cas, mettre à jour le role_id pour l'id_utilisateur '154' et insérer la nouvelle ligne pour '516'.vérifier la base de données et insérer si les données n'existent pas

role //table 
user_id role_id 
210  1 
125  2 
310  1 
154  1 


foreach($heads as $head){ 
      $first_count=$first_count+1; 
      $roleMappingObject = new role_mapping(); 
      $roleMappingObject->user_id = $head->user_id; 
      $roleMappingObject->role_id = 1; 
      $roleMappingObject->save(); //this will insert the new row for both 154 and 516 but I want to update '154' 
     } 

Répondre

0

Définir un plusieurs à plusieurs entre vos utilisateurs et rôles

Modèle utilisateur

public function roles() 
{ 
    return $this->belongsToMany(Role::class, 'role_user'); 
} 

Modèle de rôle

public function users() 
{ 
    return $this->belongsToMany(Role::class, 'role_user'); 
} 

Et puis

$user->roles()->attach($roleId)); 
1

Dans votre cas, il semble que votre ROLE_ID n'est pas une clé étrangère, si tel est le cas, vous pouvez simplement utiliser les fonctions éloquentes firstOrCreate/ firstOrNew

Le firstOrCreate recherchera par exemple avec des données fournies et retourner cette instance ou va enregistrer cette instance.

Le firstOrNew trouvera et renverra ou créera une instance mais ne l'enregistrera pas dans la base de données car vous devrez le faire en appelant la méthode save().

Mais si votre role_id est la clé étrangère à savoir id clé d'une autre table que vous devriez préférer de manière définie dans la documentation Laravel pour many to many relationship changer votre rôle table role_user et la création de relation entre la table des utilisateurs et des rôles. De cette façon, vous serez en mesure d'utiliser les méthodes attach/detach.