【问题标题】:How to access data from multiple many to many relationships in Laravel如何在 Laravel 中访问多个多对多关系中的数据
【发布时间】:2020-09-01 07:00:03
【问题描述】:

我有一个包含以下表格的数据库:

产品

  • id

  • 姓名

材料

  • id

  • 姓名

单位

  • id

  • 姓名

产品和材料表具有多对多关系,材料和单位表也具有多对多关系,因此这些是 2 个数据透视表

材料产品

  • material_id

  • product_id

ma​​terial_unit

  • material_id

  • unit_id

现在从这些关系中,我知道了产品中使用的材料,但是我将如何找出每种材料的关联单位,因为材料和单位表之间存在多对多的关系。

例如,如果有一个Product-A,其中Aluminum 作为材料之一,并且Aluminum 链接到单位表上的KgTon。现在,当我访问Product-A 时,我将如何获得正确的Aluminum 单位。

我可以在 Laravel 中做到这一点,而不是建立材料和产品关系,而是将产品表关联到 material_unit 数据透视表

ma​​terial_unit_product

  • product_id

  • material_unit_id

是的,那么 material_unit 表中也会有一个增量字段,它将充当 id,因此 material_unit 表将是

ma​​terial_unit

  • id

  • material_id

  • unit_id

  • 独特([material_id, unit_id)]

或者我可以使用 material_product 数据透视表中 material_unit 数据透视表中的 id 作为额外字段吗?

或者这是在 Laravel 中建立这种关系的更好方法吗?我不知道如何正确地做到这一点,任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 根据用例,我认为在material_product 中使用material_unit_idproduct_id 确实是一种选择。这取决于您存储的内容。我认为material_unit 是可用于此材料的可能单位列表,material_unit_product 是属于产品的具体材料单位列表。你甚至可以考虑一个包含所有 3 个 id 的表:material_idunit_idproduct_id。这样你就简单地说:这个产品在这个单元里有这个材料。
  • @RobBiermann 感谢您的评论,Laravel 模型是否支持在一个数据透视表中连接 3 个表,有什么方法可以在 eloquent 关系中使用它吗?我还想在material_product 数据透视表中添加material_unit_id?但我认为这不是最好的方法。
  • 为什么素材和单位不使用一对一的关系? Aluminum 有时是否包含 liter 单元?没有意义吧?
  • 铝是否同时有多个单元?如果不是,您可以在您的产品列中附加 unit_id,一对一的关系。如果是,您可以使用此 (stackoverflow.com/questions/61660436/…) 解决方案。我也有同样的问题。希望对你有帮助^^
  • @ElboS.P.是的,Aluminium 同时拥有多个单元。感谢您向我指出这些链接。我们可以使用 units 表的 id 并将其链接到 material_product 数据透视表,而不是将 id 添加到 material_unit 数据透视表,我们可以避免创建 material_unit 数据透视表。

标签: laravel eloquent many-to-many


【解决方案1】:

经过大量搜索并在另一个论坛上发布相同的问题后,我才知道没有这样的 Laravel 方法来处理这个问题。 对我有帮助的是我使用了数据透视表 ma​​terial_unitid 作为 ma​​terial_product 数据透视表中的外键,并且效果很好。我只需要在模型中指定它,同时使用withPivot 定义关系。之后,我可以轻松获得 material_unit 数据透视表的id,并使用id 找到该特定产品的相关材料单位。

RobBiermann 对此问题的评论以及 Laracast 论坛上 bugsyha 的评论也帮助我使用了这种方法。

【讨论】:

    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 2017-06-25
    • 2012-01-21
    • 1970-01-01
    • 2021-08-25
    • 2019-05-11
    • 2020-10-04
    • 2019-10-19
    相关资源
    最近更新 更多