"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > **Héritage de table unique ou héritage de tables multiples avec Eloquent : lequel convient le mieux à votre application Laravel ?**

**Héritage de table unique ou héritage de tables multiples avec Eloquent : lequel convient le mieux à votre application Laravel ?**

Publié le 2024-11-15
Parcourir:588

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

Implémentation de l'héritage de table unique avec Eloquent de Laravel

Lorsque vous travaillez avec des modèles de base de données, l'héritage fournit un moyen de définir des hiérarchies d'entités liées. Cependant, lorsque vous choisissez entre l'héritage à table unique ou multi-table, cette dernière apparaît souvent comme une solution plus efficace et plus flexible.

Héritage à table unique

Bien que conceptuellement plus simple, l'héritage à table unique l'héritage nécessite de stocker toutes les colonnes de tous les types dans une seule table, ce qui entraîne une prolifération potentielle des valeurs NULL. Cela peut avoir un impact sur les performances de la base de données, en particulier avec des ensembles de données volumineux.

Héritage multi-tables avec Eloquent

L'héritage multi-tables implique de diviser la table unique en plusieurs tables, chacune correspondant à un type de modèle spécifique. Le framework Eloquent de Laravel offre des relations polymorphes pour gérer ces relations de manière transparente.

Post Model

La classe de base pour tous les types de publication, Post, représente les colonnes partagées et définit un postable relation polymorphe :

class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}

Modèles de questions/articles

Chaque type de publication spécifique, comme une question ou un article, s'étend de la publication et définit une relation morphOne avec le modèle de base :

class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}

Exemples d'utilisation

  • Récupérer tous les messages : $posts = Post::all();
  • Récupérer toutes les questions : $questions = Question::all();
  • Récupérer la colonne spécifique à une question à partir d'un post: $question_column = $post->postable->question_column;
  • Vérifier le type de message : echo 'Type : '.get_class($post->postable);

Créer une nouvelle question

Créer une nouvelle question nécessite de la lier à la table Post pour conserver l'héritage multi-table :

$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'My Question';
$question->save();

$question->post()->save($post);

Bien que l'héritage multi-table implique plus de complexité, il offre une structure de base de données plus propre, améliore les performances et permet une plus grande flexibilité pour la modélisation de relations complexes.

Pour des didacticiels complets sur l'héritage multi-tables dans Laravel, reportez-vous aux ressources fournies dans la réponse à la question d'origine.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3