Maison  >  Article  >  base de données  >  **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 ?**

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 03:13:02727parcourir

**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 de grands ensembles de données.

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.

Modèle de publication

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

<code class="php">class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}</code>

Modèles de question/article

Chaque type de publication spécifique, comme Question ou Article, s'étend de Post et définit une relation morphOne avec le modèle de base :

<code class="php">class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>

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 d'un message : $question_column = $post- >postable->question_column;
  • Vérifier le type de message : echo 'Type : '.get_class($post->postable);

Créer une nouvelle question

La création d'une nouvelle question nécessite de la lier à la table Post pour conserver l'héritage multi-table :

<code class="php">$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);</code>

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 modéliser des 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.

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