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 :
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>
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>
Utilisation
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>
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!