0
votes

Détacher chaque enregistrement de modèle dans la table pivot lors de la suppression de modèle

Imagine j'ai utilisateur et rôle modèles. Maintenant, ce que je fais, c'est supprimer plusieurs utilisateurs de la base de données. Par exemple, je supprimez les utilisateurs des IDS 1, 2, 3 et 4. Je souhaite maintenant supprimer tout de la table pivot où user_id = 1, 2, 3 ou 4. Quelle est la meilleure façon de le faire? Je veux dire la mise en œuvre de Laravel.


4 commentaires

Désolé je ne peux pas l'imaginer. Il n'existe pas de table pivot dans des tables de SQL avec des rangées et des colonnes. Veuillez ajouter des exemples de données sous forme de texte à la question pour illustrer votre question.


Table de pivot est user_role Tableau avec user_id et rôle_id. beaucoup dans de nombreuses relations.


Pouvez-vous montrer comment vous supprimez les utilisateurs?


Vous pouvez utiliser des clés étrangères avec sur Supprimer = cascade dans votre table


3 Réponses :


1
votes

Si les utilisateurs et les rôles ont beaucoup à de nombreuses relations, il suffit de travailler comme ci-dessous pour votre problème

Voici les codes d'échantillonnage User.php p> xxx pré>

rôle.php p> xxx pré>

de votre contrôleur, vous pouvez faire ce p>

class AnyTestController extends Controller{
  public function test(){
   //Suppose your user id is 1 then delete user from pivot table 
   $user = User::find(1);
   $user->roles()->detach();
   $user->delete();
   }
}


2 commentaires

Le problème est que je n'ai pas $ utilisateur , j'ai $ utilisateurs .


$ users = utilisateur :: trouver ([1,2,3,4]); $ utilisateurs-> chacun (fonction ($ utilisateur) {$ utilisateur-> rôles () -> se détacher (); $ utilisateur-> supprimer ();});



2
votes

Vous pouvez accroître l'événement de suppression sur un modèle utilisateur pour supprimer également leur rôle.

user.php p> xxx pré>

Vous pouvez également utiliser des événements modèles et des observateurs à Faites ceci qui pourrait être un peu plus propre: https://laravel.com/docs/5.8/eloquant #vents . Le problème avec les observateurs et le modèle ci-dessus est que chaque fois que vous supprimez, vous aurez un problème n + 1 code>. P>

Si vous souhaitez lot utiliser les utilisateurs le moyen le plus efficace de faire Il serait de supprimer manuellement des données de la table pivot, de la sorte: P>

function deleteUsers($userIds) {
    // Delete the users roles
    DB::('user_roles')
        ->whereIn('user_id', $userIds)
        ->delete();

    // Delete the users
    User::whereIn('id', $userIds)
        ->delete();
}


0 commentaires

1
votes

Ajoutez cette Cole dans les modèles avant de supprimer les registres de l'utilisateur ou des rôles en table de pivot.

user.php p> xxx pré>

rôle.php p>

protected static function boot ()
{
    parent::boot();

    static::deleting (function ($role) {
        $role->users()->detach();
    });
}


0 commentaires