database - Laravel 模型可以是 MULTIPLE 多态类型吗?
问题描述
如果一个user
表具有如下的多态关系:
用户:
- id
- userable_id
_ userable_type
用户类型可以是
:
- App\Student
- App\Teacher
问题:我们如何处理既可以是学生又可以是老师的用户?如果一位老师决定向另一位老师上课(可能是不同的主题),就会发生这种情况。我们需要为该用户存储与教师和学生相关的唯一信息。
也许这是我们只是向用户表添加(可空)teacher_id
和(可空)student_id
列的情况?
谢谢,
解决方案
一篇关于多态性的好文章是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)并为每种类型使用独立的关系。