Maison >cadre php >Laravel >Introduction détaillée aux connaissances connexes sur la suppression d'associations de modèles Laravel

Introduction détaillée aux connaissances connexes sur la suppression d'associations de modèles Laravel

PHPz
PHPzoriginal
2023-04-06 14:21:171119parcourir

Laravel est un framework PHP populaire doté d'une puissante fonctionnalité ORM (Object Relational Mapping) qui facilite la manipulation des données. Dans Laravel, nous pouvons utiliser des associations de modèles pour implémenter des connexions et des opérations entre les tables de données.

Mais parfois, nous devons supprimer une certaine association de modèles, nous devons donc utiliser la suppression d'association de modèles de Laravel. Ci-dessous, cet article présentera en détail les connaissances pertinentes sur la suppression d'associations de modèles Laravel.

Établir une association de modèle

Avant d'introduire la suppression de l'association de modèle, comprenons d'abord comment établir une association de modèle. En prenant la relation un-à-plusieurs comme exemple, dans Laravel, nous pouvons utiliser les méthodes hasMany et appartientTo pour établir des relations de modèle.

// User 模型
class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Post 模型
class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Dans le code ci-dessus, le modèle User et le modèle Post établissent une relation un-à-plusieurs. Le modèle User utilise la méthode hasMany pour définir une association avec le modèle Post, et le modèle Post utilise la méthode AppartientTo pour définir une association avec le modèle User.

Après cela, nous pouvons utiliser ces relations pour exploiter les données. Par exemple, nous pouvons utiliser le code suivant pour récupérer tous les articles d'un utilisateur :

$user = User::find(1);
$posts = $user->posts;

Ici, nous récupérons tous les articles d'un utilisateur via la méthode posts du modèle User. Étant donné que le modèle User et le modèle Post ont une relation un-à-plusieurs, $user->posts renvoie une collection de modèles Post contenant toutes les publications de l'utilisateur.

Supprimer l'association de modèle

Pour les relations un-à-plusieurs, nous pouvons utiliser unset ou null pour supprimer l'association. Par exemple, le code suivant supprimera tous les articles d'un utilisateur :

$user = User::find(1);
$user->posts()->delete();

Dans le code ci-dessus, nous utilisons la méthode $user->posts() pour obtenir toutes les associations d'articles de l'utilisateur, puis appelons la méthode delete pour les supprimer.

Pour les relations plusieurs-à-plusieurs, nous pouvons utiliser la méthode detach pour supprimer l'association. Par exemple, le code suivant supprimera un article de la liste de surveillance d'un utilisateur :

$user = User::find(1);
$post = Post::find(1);

$user->posts()->detach($post->id);

Dans le code ci-dessus, nous utilisons la méthode $user->posts() pour obtenir l'association à la liste de surveillance d'un utilisateur, puis utilisons la méthode detach. supprime un des articles. Le paramètre de la méthode detach est l’identifiant de l’article.

Suppression en cascade

Dans certains cas particuliers, nous pouvons être amenés à supprimer son association lors de la suppression d'un modèle. À ce stade, nous pouvons utiliser la fonction de suppression en cascade de Laravel.

Pour les relations un-à-plusieurs, nous pouvons utiliser la méthode onDelete('cascade') pour implémenter la suppression en cascade. Par exemple, le code suivant supprimera toutes les publications d'un utilisateur lors de sa suppression :

// User 模型
class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class)->onDelete('cascade');
    }
}

Dans le code ci-dessus, nous définissons la suppression en cascade à l'aide de la méthode onDelete('cascade'). De cette façon, lorsqu'un utilisateur est supprimé, tous les articles associés à cet utilisateur seront également supprimés.

Pour les relations plusieurs-à-plusieurs, nous pouvons utiliser la méthode detach pour implémenter la suppression en cascade. Par exemple, le code suivant supprimera tous les articles utilisant cette balise lors de sa suppression :

// Post 模型
class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class)->withTimestamps();
    }
}

// Tag 模型
class Tag extends Model
{
    public function posts()
    {
        return $this->belongsToMany(Post::class)->withTimestamps()->onDelete('cascade');
    }
}

Dans le code ci-dessus, nous définissons la suppression en cascade à l'aide de la méthode onDelete('cascade'). De cette façon, lorsqu’une balise est supprimée, tous les articles utilisant cette balise seront supprimés.

Résumé

La fonction ORM de Laravel est très puissante et peut facilement implémenter des opérations de relation entre les modèles. Lors de la suppression d'associations de modèles, nous pouvons utiliser unset, null, detach, onDelete('cascade') et d'autres méthodes pour supprimer l'association. Dans le même temps, la suppression en cascade est également une fonction très utile, qui peut éviter de supprimer manuellement les données associées une par une.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn