Maison > base de données > tutoriel mysql > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-25 03:13:02
original
726 Les gens l'ont consulté

**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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!