Laravel 中的多用户类型设计
Multi user type design in 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-column 吗?或者你会如何设计这样的功能?
我想创建两个表
第一个是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) | | |
+----------------------+---------+-------+
关系为one to one。
我建议在将数据处理到数据库之前使用 Laravel validation "required_if" 来验证数据。
$this->validation($request, [
'address' => 'required_if:role,merchant_owner'
]);
我对如何最好地为多用户类型帐户创建架构感到困惑。观看有关用户和角色的 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-column 吗?或者你会如何设计这样的功能?
我想创建两个表
第一个是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) | | |
+----------------------+---------+-------+
关系为one to one。
我建议在将数据处理到数据库之前使用 Laravel validation "required_if" 来验证数据。
$this->validation($request, [
'address' => 'required_if:role,merchant_owner'
]);