Maison >base de données >tutoriel mysql >**Héritage de table unique ou héritage de tables multiples avec Eloquent : lequel convient le mieux à votre application Laravel ?**
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
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!