【问题标题】:Laravel 5.1 - Pivot table between 3 existing physical tablesLaravel 5.1 - 3 个现有物理表之间的数据透视表
【发布时间】:2015-10-22 20:49:56
【问题描述】:

我是 Laravel 5.1 的新手,我目前正在做一个项目以自己熟悉 Laravel。

我的应用程序中有很多表,但我卡在 3 个表之间的特定多重关系上(可能应该使用数据透视表)。

所以,我有 3 张桌子:

  • 角色
  • 用户
  • 项目

以下规则适用于关系:

  • 一个用户可以拥有 0 到多个项目
  • 一个项目可以被许多不同的用户访问
  • 根据用户的角色授予用户对特定项目的某些权限
  • 用户有一个“活动”项目,应用程序从该项目中获取数据。用户可以从项目列表中更改他们的“活动”项目。

(权限与角色相关联,并允许具有特定角色的用户对项目执行一组定义的操作)

我最初有一个用户 角色,它运行良好(就代码而言),但为用户定义的角色允许在每个项目上执行一组预定义的事情(这对我来说不够灵活) .

我已经看到另一个帖子,大约。 same title as mine 但恐怕这不能满足我的需求,因为属性保存在交集表上,但在我的情况下,我已经有了物理表。

【问题讨论】:

  • 帮助我的一件事是使用一个数据透视表,其中有一个额外的列。因此,在您的情况下,可能是用户和项目的数据透视表,然后在该数据透视表中包含一个 role_id 列。用户一次只能有一个“活动”项目吗?
  • 你还说“我已经有了实体表。”,那些是什么表?你能告诉我们布局吗?
  • 事实上,我有一个按照 Laravel 规范定义的交集表。 IE。 project_user 迁移。如果我在数据透视表上添加 role_id,我不知道我将能够检索用户对项目的角色,而且你是对的,一个用户一次只能有 1 个活动项目。所以我想我可以在交集表上添加可能的 role_id 并定义在给定时间哪个项目处于活动状态。我会尝试这样的事情,并在成功后发布一个 sn-p,以便其他人从中受益。
  • 看看这个问题的答案:stackoverflow.com/questions/30222003/… - 因为这可能会给你一些获取 role_id 的方向
  • 谢谢,一旦我实施了一个可行的解决方案来帮助他人,我会检查并更新。

标签: php laravel laravel-5


【解决方案1】:

为您的数据透视表制作一个模型,这样应该更容易使用。

项目受托人:

  • project_id
  • user_id
  • role_id (表示在项目 X 上,用户 Y 具有角色 Z)

然后你可以定义以下关系:

  • 项目:hasMany(ProjectAssignees)
  • ProjectAssignee:belongsTo(Project)、belongsTo(User)、belongsTo(Role)
  • 用户:hasManyThrough(Project, ProjectAssignee), hasMany(ProjectAssignee)

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 2015-11-11
    • 2020-07-22
    • 1970-01-01
    • 2016-08-04
    • 2014-09-16
    • 2015-09-30
    • 2016-02-12
    • 2018-04-10
    相关资源
    最近更新 更多