首页 > 解决方案 > Laravel 模型可以是 MULTIPLE 多态类型吗?

问题描述

如果一个user表具有如下的多态关系:

用户: - id - userable_id _ userable_type

用户类型可以是 : - App\Student - App\Teacher

问题:我们如何处理既可以是学生又可以是老师的用户?如果一位老师决定向另一位老师上课(可能是不同的主题),就会发生这种情况。我们需要为该用户存储与教师和学生相关的唯一信息。

也许这是我们只是向用户表添加(可空)teacher_id和(可空)student_id列的情况?

谢谢,

标签: databaselaravellaravel-5polymorphism

解决方案


一篇关于多态性的好文章是https://hashrocket.com/blog/posts/modeling-polymorphic-associations-in-a-relational-database

使用teacher_id 和student_id 是处理此问题的一种方法,如果您没有预见到其他用户类型,那可能是最好的方法。这种类型的关系称为独占关系。它是可扩展的,但每种类型都需要一个额外的列。

Laravel 使用多态连接类型的关系。它可以轻松扩展和处理多种类型,但缺乏一些参照完整性。如果将来类型可以扩展,并且用户可以属于多种类型,那么您需要多对多多态关系:https ://laravel.com/docs/5.6/eloquent-relationships#many-to-many-polymorphic - 关系

如果我只有两种公司类型,我可能不会使用多态连接。我将依赖第一种方法(Exclusive Belongs To)并为每种类型使用独立的关系。


推荐阅读