【问题标题】:MySQL User with Roles, Role specific fields?具有角色的 MySQL 用户,角色特定字段?
【发布时间】:2017-09-10 00:33:53
【问题描述】:

我有一个用户可以是供应商或商店的应用程序。 现在这两个角色具有非常不同的角色特定字段..

基本上,商店可以向供应商下订单。因此,商店可以下订单,而供应商将收到这些订单。

我会将这些字段放在哪里以获得良好的实践?

  • 将它们全部添加到 User 类中,并使用可为空的类型(似乎不对!)
  • 为每个角色创建不同的类。所以我们有一个带有 user_id 的供应商类和一个带有 user_id 的 Shop 类,我必须使用 $user->supplier->field 或 $user->shop->field...
  • 查询这些字段

这些似乎都不是可行的方法。有任何想法吗? 谢谢!

【问题讨论】:

  • 我认为这真的取决于您的应用程序的上下文。尝试提供有关应用程序其余部分的更多信息,因为这将有助于确定正确的方法。
  • 商店可以向供应商下订单。所以商店可以下订单,而供应商将收到这些订单。
  • 画出两种方式,包括SELECTs。完成后,您将回答自己的问题。 (也就是说,仍然没有足够的信息来为您提供建议。)

标签: php mysql database laravel database-design


【解决方案1】:

“供应商”是“一方”(“个人”或“组织”)所扮演的角色

您的商店可能会从供应商处获得目录,并可能向他们索取报价。

您的商店创建“采购订单”并将其发送给供应商,他们向您发送“订单响应”

供应商不是用户。您可以为他们的员工创建“用户”

为什么不直接使用像 Odoo 这样的现有 ERP?

【讨论】:

    【解决方案2】:

    用户可以拥有多个商店或提供多个商店吗?您的第二个选项似乎不错。

    用户 hasMany:供应商、商店
    - 身份证
    - 名称

    供应商 belongsTo, hasOne: user
    - 身份证
    - 用户 ID
    - fields_supplier

    Shop属于To,hasOne:用户
    - 身份证
    - 用户 ID
    -fields_shop

    $user->supplier->fields_supplier;
    $user->shop->fields_shop;
    $supplier->user->name;
    $shop->user->name;

    -- 如果您有更多关于您希望它如何工作的信息,那将会有所帮助。

    【讨论】:

    • 感谢您的回答。现在的问题是,供应商和商店都有订单,商店发送订单,供应商收到订单。但是如果我调用 $user->orders.. 或者您会按照以下方式进行操作:$user-> shop->orders 和 $user->supplier->orders
    • 流程是否类似于:1. 商店创建订单,2. 订单可供供应商使用,3. 供应商接受并履行订单?
    • 在这种情况下,我会考虑在 Order 中添加“创建者”(shop_id)和“履行者”(supplier_id)列。然后这些列可以成为相对键?
    【解决方案3】:

    您不必坚持使用单个 users 表。您可以拥有 Supplier 模型和 Shop 模型(带有 suppliersshops 表)。

    然后在config/auth.php 文件中,您可以使用 Eloquent 驱动程序设置一个新的身份验证提供程序,但使用不同的模型。然后,您可以将这些提供程序分配给您创建的任何新警卫。

    您可以在此处阅读有关身份验证和授权的更多信息: https://laravel.com/docs/5.4/authentication

    https://laravel.com/docs/5.4/authorization

    编辑

    在 cmets 中提到多态关系之后,我认为这更适用于这种类型的关系(多种类型的用户,每个用户都有自己的一组字段)。

    在这里阅读更多:

    https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations

    【讨论】:

    • 如果多态性仅适用于身份验证,这将起作用。如果还有其他多态方面,例如:“订单可以属于供应商或商店”,Laravel 支持多态关系(参见:laravel.com/docs/5.4/…
    • 我在考虑那个选项。但是这样做的开销不是很大吗?那么角色的整个想法就不再适用了,对吧?
    • 如果出现管理员角色怎么办?那可以看到所有的订单,那我要创建另一个身份验证提供者吗?对吗?
    • 我已经修改了我的答案。我同意 Jeffrey 的观点,即多态关系会有所帮助。
    • 谢谢,所以供应商可以有订单,但商店也可以......他们都是用户......你认为这是多态的情况吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 2014-08-31
    • 1970-01-01
    • 2019-08-13
    • 2015-01-28
    • 2022-09-23
    • 2012-02-24
    • 2010-12-22
    相关资源
    最近更新 更多