【问题标题】:Eloquent/Laravel Three-way Many-to-Many RelationshipEloquent/Laravel 三向多对多关系
【发布时间】:2013-05-27 20:21:43
【问题描述】:

我是 Laravel 和 Eloquent 的新手(而且我一般对 ORM 的经验很少)。

假设我有三个数据库表:

  1. 小部件
  2. 操作
  3. 用户

我已经为一个包含以下列的联结表建模:

  1. widget_id
  2. action_id
  3. user_id
  4. 时间戳

连接点是保存交互日志——每次userwidget 执行action 时都记录一个时间戳。我了解了如何使用 Eloquent 对简单的多对多关系进行建模并且可以正常工作,但我不确定如何对更复杂的三向关系进行建模。

就此而言,即使我有一个简单的多对多关系(比如 widgetaction,所以会有一个名为 action_widget 的表),我如何为 @ 添加显式模型Eloquent 中的 987654330@ 表,用于跟踪有关每个关系的额外数据(例如时间戳、cmets 字段等)。或者,我只是在以完全错误的方式处理这件事吗?

作为 ORM 的新手,我觉得自己能做的非常有限!这种感觉会消失吗? :p

【问题讨论】:

    标签: orm laravel eloquent


    【解决方案1】:

    当你有像分类文章这样的 2 路关系时,枢轴工作正常。 但如果你有 3 路关系,我认为最好有一个名为 WidgetUserAction 的模型。

    编辑:对于这些情况,新的“hasManyThrough”工作正常。

    【讨论】:

    • 谢谢,使用自定义模型绝对是最好的解决方案。
    • 您能解释一下您将如何处理这件事吗?我面临着类似的问题,但我对 Eloquent 的了解不够,无法遵循它,而且文档也不够好。
    • hasManyThrough 不适用于这种情况。因为 hasManyThrough 不返回关系,而只返回第三个属性的值。
    【解决方案2】:

    Laravel 可以自动创建中间模型。它们被称为“数据透视表”。

    我建议你阅读this section in the documentation

    【讨论】:

    • 我玩过这个,认为我更喜欢 Milad 的回答。还有其他理由使用数据透视表方法吗?
    • 不是,我还没试过。中间表的自定义模型听起来是个好主意。
    猜你喜欢
    • 2013-06-22
    • 2019-06-13
    • 2018-03-28
    • 2015-08-19
    • 2019-03-26
    • 1970-01-01
    • 2020-03-27
    • 2013-02-09
    • 2013-05-15
    相关资源
    最近更新 更多