Maison > Article > base de données > Comment pouvez-vous implémenter l'héritage de table unique pour les modèles d'article et de question à l'aide d'Eloquent de Laravel, s'étendant du modèle Post ?
Question :
Étant donné le modèle Post :
<code class="php">class Post extends Eloquent { // Model code... }</code>
Comment pouvez-vous implémenter l'héritage pour les modèles d'articles et de questions, leur permettant de s'étendre à partir de Post ?
Héritage de table unique
L'héritage de table unique implique le stockage de toutes les données du modèle dans un seul tableau avec une colonne de type pour différencier les modèles. Cependant, cette approche peut conduire à de nombreuses valeurs NULL en raison de colonnes inutilisées pour des types de modèles spécifiques.
Héritage multi-tables
L'héritage multi-tables utilise le polymorphisme, en utilisant des tables distinctes pour chaque modèle tout en les reliant via une table de référence. La table de référence comprend des colonnes comme postable_id et postable_type.
Configuration du modèle éloquent
Dans le modèle Post, définissez une relation morphTo :
<code class="php">public function postable(){ return $this->morphTo(); }</code>
Dans le modèle Question (similaire à l'article) :
<code class="php">public function post(){ return $this->morphOne('Post', 'postable'); }</code>
Utilisation :
<code class="php">$post = new Post(); $post->shared_column = 'New Question Post'; $post->save(); $question = new Question(); $question->question_column = 'test'; $question->post()->save($post);</code>
Conclusion
L'héritage multi-tables offre un structure de base de données plus efficace par rapport à l'héritage de table unique. Cela nécessite une logique de modèle supplémentaire, mais il fournit une approche plus flexible et évolutive pour gérer l'héritage de modèle dans Eloquent de 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!