首页 > 解决方案 > Laravel 中的多用户类型设计

问题描述

我对如何最好地为多用户类型帐户创建架构感到有些困惑。观看有关用户和角色的 Laracasts 剧集,我认为带有角色模型的单个用户模型将是一个好方法。但是,重新考虑我为不同类型的用户需要的数据会有所不同,因为对于某些用户,我需要完整的地址数据,而对于其他用户来说,一个名字就足够了(在登录时轻轻地让他们变得更好)。但是,访客可能会变成客户。事实上,即使是 MerchantEmployee 也可以成为客户。这让我想知道我的数据库设计会变成什么,例如

users => UserModel <fields> email, password
role: visitor => VistorModel <fields> name
role: customer => CustomerModel <fields> name, street, zipcode, ...
role: merchantowner => MerchantOwnerModel <fields> name, street, zipcode, ...
role: merchantemployee => MerchantEmployeeModel <fields> name

那么所有的 Vistor、Customer、MerchantOwner 和 MerchantEmployee 模型都会有一个 user_id 列吗?或者你会如何设计这样的功能?

标签: laravelmulti-user

解决方案


我想创建两个表

第一个是users

+----------+---------+-------+
|   Col    |  Type   | Notes |
+----------+---------+-------+
| id       | bigInt   | PK/AI |
| name     | VARCHAR | NN    |
| email    | VARCHAR | NN|UN |
| password | VARCHAR | NN    |
| role     | ENUM    | NN    |
+----------+---------+-------+

第二个是user_data

+----------------------+---------+-------+
|         Col          |  Type   | Notes |
+----------------------+---------+-------+
| id                   | bigInt  | PK/AI |
| user_id              | bigInt  | FK    |
| address              | VARCHAR | NN    |
| {WHAT EVER YOU WANT) |         |       |
+----------------------+---------+-------+

并且是一对一的关系。

我建议在将数据处理到数据库之前使用Laravel 验证“required_if”来验证数据。

$this->validation($request, [
 'address' => 'required_if:role,merchant_owner'
]);

推荐阅读