Imagine j'ai utilisateur code> et
rôle code> 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. P>
3 Réponses :
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> rôle.php p> 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();
}
}
Le problème est que je n'ai pas $ utilisateur code>, j'ai
$ utilisateurs code>.
$ users = utilisateur :: trouver ([1,2,3,4]); $ utilisateurs-> chacun (fonction ($ utilisateur) {$ utilisateur-> rôles () -> se détacher (); $ utilisateur-> supprimer ();});
Vous pouvez accroître l'événement de suppression sur un modèle utilisateur pour supprimer également leur rôle.
user.php p> 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 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> n + 1 code>. P>
function deleteUsers($userIds) {
// Delete the users roles
DB::('user_roles')
->whereIn('user_id', $userIds)
->delete();
// Delete the users
User::whereIn('id', $userIds)
->delete();
}
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> rôle.php p> protected static function boot ()
{
parent::boot();
static::deleting (function ($role) {
$role->users()->detach();
});
}
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 code> 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