【发布时间】:2019-03-25 02:03:28
【问题描述】:
我对多对多表 id(主键)有一些疑问。根据 Laravel 文档,多对多关系由两个模型和三个表组成。每个模型都有对应的表,中间表有as字段:
- 自动增量 ID
- table1_id
- table2_id
- other_attributes ...
到目前为止,一切都很好。我已经用过很多次了,使用助手“pivot”访问字段,并使用“updateExistingPivot”等更新这些字段。
我的问题是是否值得从其他表的属性中利用中间表的ID,例如FK。
示例:
在我的应用程序中,我有这些模型:
- 机器
- 产品
- 限制
还有这四张表:
- 机器(ID、名称、...)[机器]
- 产品(ID、名称、...)[产品]
- machine_products (id, machine_id[FK], product_id[FK], price) [无型号]
- 限制(id、machine_product_id[FK]、day、begin_hour、end_hour)[限制]
给定特定的机器和产品,有 N 个限制。 一种限制属于一种特定的机器和产品。
如您所见,我利用自动增量 ID(中间表的主键)来关联限制。但是这样一来,使用 Eloquent 就有点奇怪了,就像从 Machine / Product 访问 Restriction 或者反过来一样,并不容易:
Restriction::where('machine_product_id', Machine::find(1)->products()->first()->pivot->id );
如果我要从给定的Restriction 中获得Product 或Machine,我将不得不从我拥有的限制的machine_product_id 行中找到'machine_id' 和'product_id'。
我不知道在使用 Eloquent 时是否出于实用性和功能性问题,最好使用machine_id and product_id 做两个多对多表,一个使用price (machine_products),另一个使用day, begin_hour, end_hour (restrictions) .第一个表是 1 到 1(machine_products)和另一个 1 到 N(限制)。我的意思是:
-
给定特定的 machine_id 和 product_id,
machine_products将只有一个价格。 -
给定特定的 machine_id 和 product_id,
restrictions将包含 N 行,包括 day、begin_hour、end_hour。
或者我做一个模型叫MachineProduct会更好?我不知道...
你能告诉我或推荐解决这个困境的最佳方法吗?已经在修改表、模型或任何需要的东西。
谢谢。
【问题讨论】:
标签: mysql laravel eloquent many-to-many relationship