Laravel / MySql中的多态与普通数据库设计

时间:2017-09-26 15:08:34

标签: mysql database laravel database-design polymorphism

我在Laravel中设计了一个新的应用程序,其用户部分有三种类型的用户(学生,代理,赞助商),每个用户都有不同的属性。我有两个选择:

1-通过创建这样的用户来创建一对一的多态关系:

            $table->uuid('id');
            $table->primary('id');
            $table->string('email')->unique();
            $table->string('password');
            $table->uuid('userable_id'); //polymorphic
            $table->string('userable_type'); //polymorphic

2-将user_id属性添加到每个表(学生,代理,赞助商)并将其引用到用户表中,如下所示:

            $table->uuid('id');
            $table->primary('id');
            $table->uuid('user_id'); //FK to user table

我的问题是哪一个是最佳选择?每个人的利弊是什么? 谢谢。

1 个答案:

答案 0 :(得分:0)

我更喜欢使用数字1。

我已经使用方法2开发了一个Laravel应用程序。此方法的问题是您需要为User Model(hasOne)上的每种类型的用户设置三个单独的关系。然后,无论何时需要关系,您都必须先检查用户,然后调用相关方法(例如,如果您需要学生,则需要检查用户是否为学生,然后加载关系)。

在方法1中,您只需在User Model上设置一个关系。然后,只要您需要加载相关模型,您只需要调用一个方法。

希望这可以帮助您做出决定。