问题:
给定 Post 模型:
<code class="php">class Post extends Eloquent { // Model code... }</code>
如何实现 Article 和 Question 模型的继承,允许它们从 Post 扩展?
单表继承
单表继承涉及存储所有模型数据在带有类型列的单个表中以区分型号。但是,由于特定模型类型未使用列,这种方法可能会导致大量 NULL 值。
多表继承
多表继承采用多态性,利用单独的表来实现每个模型,同时通过参考表将它们连接起来。参考表包括 postable_id 和 postable_type 等列。
Eloquent 模型设置
在 Post 模型中,定义 morphTo 关系:
<code class="php">public function postable(){ return $this->morphTo(); }</code>
在问题模型中(与文章类似):
<code class="php">public function post(){ return $this->morphOne('Post', 'postable'); }</code>
用法:
<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>
结论
多表继承提供了与单表继承相比,更高效的数据库结构。它需要额外的模型逻辑,但它提供了一种更灵活和可扩展的方法来处理 Laravel 的 Eloquent 中的模型继承。
以上是如何使用 Laravel 的 Eloquent(从 Post 模型扩展)实现 Article 和 Question 模型的单表继承?的详细内容。更多信息请关注PHP中文网其他相关文章!