【问题标题】:Laravel 5.4: User model relationships depending on a roleLaravel 5.4:取决于角色的用户模型关系
【发布时间】:2017-09-16 18:47:39
【问题描述】:

我想在这种情况下询问最佳策略(使用 MySQL DB):

我有一个用户模型/表。用户可以是 3 种不同的类型:Admin、Owner 和 Worker。

  • 所有者有很多地点
  • 该地点有许多工人
  • 工作人员属于某个位置

我看到的第一个选项:

所有者和工作人员扩展用户模型是否有意义,因为它们具有公共字段并在用户表中添加“角色”字段?

为 Owner 和 Worker 创建另外 2 个表是否正确?

Eloquent 将如何处理这种情况下的关系?

第二个选项(更简单但...):

Admin、Owner、Worker 是 3 个不同的模型/表


然后我想获取如下数据:

  • $location->owner() // 获取此位置的“所有者”角色的用户
  • $location->workers() // 获取此位置的“workers”角色的用户
  • $owner->workers() // 获取与所有者相关的工人

【问题讨论】:

  • 我会说保留单个用户表,并将角色中间表用于 belongsToMany 关系,这样将来如果用户可以拥有多个角色,它将被处理。并且您可以在用户模型上定义 location 和 worker belongsTo 关系,它本身没有问题,如果该关系没有其他角色的数据,它将返回 null。
  • 谢谢,但是如何设置模型才能做到:$location->workers() 或 $owner->workers()?

标签: laravel eloquent laravel-eloquent


【解决方案1】:

最后,我使用了:

  • 用户表
  • 角色表
  • role_user 数据透视表
  • 位置表
  • location_user 数据透视表

在 User 模型中,一些 queryScope 方法按角色检索用户:

public function scopeOwners($query) 
    {
        $query->whereHas('roles', function ($q) {
            $q->where('name','owner');
        });
    }

很简单。

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 2017-04-03
    • 2020-07-03
    • 2017-08-10
    • 2022-01-12
    • 2016-07-30
    • 1970-01-01
    • 2017-04-16
    • 2017-05-17
    相关资源
    最近更新 更多