Laravel模型可以是多种多态类型吗?

时间:2018-08-02 14:49:09

标签: database laravel laravel-5 polymorphism

如果user表具有如下所示的多态关系:

用户: - id - userable_id _ userable_type

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

问题:我们如何处理既是学生又是老师的用户?如果一位老师决定从另一位老师那里上课(也许是一个不同的话题),就会发生这种情况。我们将需要为此用户存储与老师和学生有关的唯一信息。

也许是在这种情况下,我们只向用户表添加了(nullable)teacher_id和(nullable)student_id列吗?

谢谢

1 个答案:

答案 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

如果我只有两种公司类型,我可能不会使用多态联接。我将依靠第一种方法(独占属于)并对每种类型使用独立的关系。