Maison  >  Article  >  base de données  >  Comment implémenter l'héritage multi-tables pour les publications dans Laravel à l'aide d'Eloquent ?

Comment implémenter l'héritage multi-tables pour les publications dans Laravel à l'aide d'Eloquent ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 04:40:30138parcourir

How to Implement Multi-Table Inheritance for Posts in Laravel Using Eloquent?

Implémentation de l'héritage de table unique dans Laravel à l'aide d'Eloquent

Scénario :

Vous avez un modèle nommé Post et que vous souhaitez diviser les publications en deux types : articles et questions, en utilisant l'héritage.

Héritage de table unique

L'héritage de table unique implique le maintien de tous les types dans la même table , avec une colonne pour les distinguer. Bien que cette approche puisse être plus simple, elle peut entraîner de nombreuses valeurs NULL en raison de colonnes qui ne sont pas applicables à tous les types.

Héritage multi-tables

Multi table l'héritage est une approche plus propre qui divise les données en plusieurs tables. Une colonne postable indique le type de publication et un postable_id fait référence à la clé primaire dans la table correspondante.

Implémentation de l'héritage multi-tables dans Eloquent

Modèle de publication :

Ajouter une relation postable au modèle Post, qui sera une relation polymorphe :

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

Modèles de questions et d'articles :

Créez des modèles distincts pour chaque type de publication et établissez la relation avec le modèle Post :

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

Utilisation :

  • Récupérer toutes les publications : Post::all().
  • Récupérer toutes les questions : Question::all().
  • Accéder aux propriétés des questions associées à partir d'un objet Post : $post->postable->question_column .
  • Déterminez le type de publication : get_class($post->postable).
  • Créez une nouvelle question :

    • Créez à la fois une question et Publier un objet.
    • Liez-les en utilisant $question->post()->save ($post).

Recommandation :

Pour une implémentation plus conviviale, il est recommandé de consolider la logique de création de modèle dans des fonctions réutilisables au sein de chaque classe de modèle.

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