如果user
表具有如下所示的多态关系:
用户:
- id
- userable_id
_ userable_type
用户类型可以是:
- App\Student
- App\Teacher
问题:我们如何处理既是学生又是老师的用户?如果一位老师决定从另一位老师那里上课(也许是一个不同的话题),就会发生这种情况。我们将需要为此用户存储与老师和学生有关的唯一信息。
也许是在这种情况下,我们只向用户表添加了(nullable)teacher_id
和(nullable)student_id
列吗?
谢谢
答案 0 :(得分:0)
关于多态性的好文章是https://hashrocket.com/blog/posts/modeling-polymorphic-associations-in-a-relational-database。
使用教师ID和学生ID是处理此问题的一种方法,如果您不预见其他用户类型,那可能是最好的方法。这种类型的关系称为“排他性”。它是可扩展的,但每种类型都需要一个额外的列。
Laravel使用多态联接类型的关系。它可以轻松地扩展和处理许多类型,但是缺乏参照完整性。如果类型将来可以扩展,并且用户可以属于许多类型,那么您将需要多对多的多态关系:https://laravel.com/docs/5.6/eloquent-relationships#many-to-many-polymorphic-relations
如果我只有两种公司类型,我可能不会使用多态联接。我将依靠第一种方法(独占属于)并对每种类型使用独立的关系。