Maison > base de données > tutoriel mysql > ## L'héritage multi-tables dans Eloquent de Laravel : une approche plus propre ?

## L'héritage multi-tables dans Eloquent de Laravel : une approche plus propre ?

Barbara Streisand
Libérer: 2024-10-27 01:59:30
original
615 Les gens l'ont consulté

## Multi-Table Inheritance in Laravel's Eloquent: A Cleaner Approach?

L'héritage multi-tables dans Eloquent de Laravel

La mise en œuvre de l'héritage de table unique peut sembler une solution pratique pour étendre des modèles, mais elle présente des inconvénients tels que augmentation de la taille de la base de données en raison de nombreuses valeurs NULL et de complexités lors de l'interrogation de colonnes spécifiques. Au lieu de cela, l'héritage multi-tables offre une approche plus propre.

Conception de schéma

Créez des tables séparées pour les colonnes partagées et des colonnes uniques pour chaque type de modèle. Par exemple :

  • messages (shared_column)
  • questions (question_column, question_column2)
  • articles (article_column, article_column2)

Modèles éloquents

Définissez le modèle Post comme classe parent.

<code class="php">class Post extends Eloquent {
    // Shared column, relationships, etc.
    
    public function postable(){
        return $this->morphTo();
    }
}</code>
Copier après la connexion

Créez des modèles enfants comme Question pour chaque type postable.

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

Utilisation

  • Récupérez tous les messages : $posts = Post::all();
  • Récupérer toutes les questions : $questions = Question::all();
  • Récupérer les colonnes de questions d'un message : $question_column2 = $post-> ;postable->question_column2;
  • Vérifiez de quel type est une publication : echo 'type: '.get_class($post->postable);

Création d'un nouveau Modèles

Implique la création d'enregistrements à la fois dans la table partagée (messages) et dans la table spécifique au type (questions).

<code class="php">$question = new Question(); // Create a question record
$question->question_column = 'test';
$question->save();

$post = new Post(); // Create a post record
$post->shared_column = 'New Question Post';
$post->save();

// Link them together
$question->post()->save($post);</code>
Copier après la connexion

Cette approche garantit une structure de base de données plus efficace et fournit une solution évolutive pour l'héritage de modèle dans Laravel.

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