【发布时间】:2020-12-14 13:51:30
【问题描述】:
我在 Laravel 中构建了一个应用程序,它是一个简单的 CRUD 应用程序。现在我正在为迁移而苦苦挣扎。
用户属于公司。公司可以有很多用户。
公司类型可以是供应商、客户或内部。 所有 3 种公司类型都有不同的字段。例如
供应商表包含:company_name、incoterm、payment_term、 业务类型...等
客户表包含:公司名称、艺术品、折扣、 target_margin...等
内部表仅包含 company_name、updated_at 和 created_at 字段。
所以所有的都有 company_name 字段,所有其他字段都不同。
当用户登录时,我希望能够识别他是供应商/客户还是内部人员。
我希望能够说 Supplier::find($id)->name 应该返回我的公司名称。
Supplier::find($id)->users 应该返回供应商拥有的所有用户。客户相同,内部相同。
我不确定我是否应该在用户表中设置 user_type 列来声明内部用户供应商/客户,或者我应该怎么做?
我在想这样的事情:
表格
用户:
id
name
last_name
company_type
company_id
供应商:
id
company_name
incoterm
payment_term
business type
客户:
company_name
artwork
discount
target_margin
内部:
company_name
用户表示例:
-
id: 1
name: "Aleksandar"
last_name: "Alex"
email: "alex@admin.com"
password: "$2y$10$4cYfe/J71VoCib.esHasWud7ueRHURMmcaqSECBJjNJ.y05qtXYXO"
company_type: "\\App\\Model\\Supplier"
company_id: 1
-
id: 2
name: "Another"
last_name: "User"
email: "user@admin.com"
password: "$2y$10$4cYfe/J71VoCib.esHasWud7ueRHURMmcaqSECBJjNJ.y05qtXYXO"
company_type: "\\App\\Model\\Customer"
company_id: 1
-
id: 3
name: "Internal"
last_name: "User"
email: "user@admin.com"
password: "$2y$10$4cYfe/J71VoCib.esHasWud7ueRHURMmcaqSECBJjNJ.y05qtXYXO"
company_type: "\\App\\Model\\Internal"
company_id: 1
有了这个之后,我可以执行user.company_type::find($id) 之类的操作,我将从供应商/客户或内部获得所有具有给定 $id 的东西。
这是正确的做法吗?如果是,那么我如何从供应商 N 获得所有用户? Supplier::find($id)->users 或将来的 Supplier::find($id)->posts 将需要额外的 eloquent 过滤器,因为用户中的 company_id 可以为 1 表示供应商、客户或内部,如上面的示例。
编辑: 我正在使用 Laravel v6.18.35
【问题讨论】:
-
你的方法是正确的
-
你在使用 Eloquent 吗?你用的是什么版本的laravel?您是否已经在使用 polymorphic relations 。将 php 类存储在数据库中对我来说似乎是一种不好的做法,您可能需要使用 morph map 来避免这种情况。
-
@hsibboni 是的,我正在使用 Eloquent。 Laravel v6.18.35。不,我现在没有使用多态关系。老实说,不知道他们。
-
@mare96 的回答应该对你有所帮助,这似乎是要走的路,祝你好运。
标签: php mysql sql database laravel