【发布时间】:2020-09-01 07:00:03
【问题描述】:
我有一个包含以下表格的数据库:
产品
id
姓名
材料
id
姓名
单位
id
姓名
产品和材料表具有多对多关系,材料和单位表也具有多对多关系,因此这些是 2 个数据透视表
材料产品
material_id
product_id
material_unit
material_id
unit_id
现在从这些关系中,我知道了产品中使用的材料,但是我将如何找出每种材料的关联单位,因为材料和单位表之间存在多对多的关系。
例如,如果有一个Product-A,其中Aluminum 作为材料之一,并且Aluminum 链接到单位表上的Kg 和Ton。现在,当我访问Product-A 时,我将如何获得正确的Aluminum 单位。
我可以在 Laravel 中做到这一点,而不是建立材料和产品关系,而是将产品表关联到 material_unit 数据透视表
material_unit_product
product_id
material_unit_id
是的,那么 material_unit 表中也会有一个增量字段,它将充当 id,因此 material_unit 表将是
material_unit
id
material_id
unit_id
独特([material_id, unit_id)]
或者我可以使用 material_product 数据透视表中 material_unit 数据透视表中的 id 作为额外字段吗?
或者这是在 Laravel 中建立这种关系的更好方法吗?我不知道如何正确地做到这一点,任何帮助将不胜感激。
谢谢
【问题讨论】:
-
根据用例,我认为在
material_product中使用material_unit_id和product_id确实是一种选择。这取决于您存储的内容。我认为material_unit是可用于此材料的可能单位列表,material_unit_product是属于产品的具体材料单位列表。你甚至可以考虑一个包含所有 3 个 id 的表:material_id、unit_id、product_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