【问题标题】:How to handle multiple many to many relationships如何处理多个多对多关系
【发布时间】:2021-03-15 16:40:12
【问题描述】:

我有一个 Laravel 项目,其中可能存在多个多对多关系,但我觉得在正确使用数据透视表方面我在绕圈子。

实体如下:

  • 中心:一个即将开业并拥有诸如此类信息的办公室 作为名称、位置、邮政编码、开业日期
  • 任务:在中心开放之前必须完成的任务,它包含名称、部门和中心类型等信息
  • 部门:部门代表一个关键领域,例如 IT、市场营销、销售等。每项任务都会引用一个部门。
  • 用户:用户是系统的用户,属于某个部门,可以完成任务。

注意事项:

  • 一个部门有用户,所以用户会有一个部门ID
  • 一个任务有一个部门,所以也有一个部门ID
  • 一个中心有部门,所以一个支点叫做 center_department,有 center_id 和 department_id
  • 用户有分配给他们的任务,但只有属于某个中心的任务

下面的语句是我要绕圈子的地方,因为:

  • 将任务分配给一个中心,这很好,因为您可以使用 center_id 和任务 id 制作像 center_task 这样的表
  • 一个用户有分配给他们的任务,但是,是否可以有一个包含 user_id 和 center_task_id 的 task_user 表,实际上是一个使用另一个数据透视表的数据透视表?

这是因为用户不能直接分配给任务,他们只能分配给中心内的任务,因为任务与中心具有多对多关系。

如果我只使用任务 ID 分配用户,他们将被分配到每个相关中心的该任务。

那么,让一个使用另一个数据透视表的数据透视表是否可以,或者这是否表明我建议的结构存在问题?

预期流量

  • 用户创建任务,为其分配部门和类型,以便该任务仅与特定部门和中心类型相关。
  • 用户可以将中心内的任务分配给与任务部门相关的部门中的用户
  • 中心的任务将有一个受让人和一个截止日期

理论上,我最终会得到一个包含以下内容的数据透视表:

  • user_id
  • center_task_id
  • 截止日期
  • date_completed

基本上我只是觉得我连接了太多部分?

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

Laravel 为你做链接,只需在你的模型中使用(在这种情况下)morphToMany()morphedByMany() 来建立两个表之间的关系。有一个非常好的 Laracast 和一个非常好的文档。我在下面链接了这个:

Laracast Video非常好的多对多关系解释

Laravel Documentation 用于一般的 Eloquent ORM

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2011-02-09
    • 2020-10-09
    相关资源
    最近更新 更多