您的方法适合您当前的要求,保持两个枢轴保持折扣分开,索引将提供获取数据的速度,但缺点是您需要从 2 个表中查询以获取所有折扣(会稍微慢一些)。
以下只是一种可能,您可以忽略它,但请尝试阅读
但我想提几个可能性
- 如果店主想对特定品牌应用折扣怎么办?(假设您同意添加此功能)例如他希望所有 Raymond 产品都有折扣?使用当前模式,您需要找到所有带有 Raymond's 的产品
brand_id
,并将表中的单个条目添加discount_product
到所有这些产品(并不是那么困难,但表中的数据会变得非常大),或者为品牌创建一个新的数据透视表。
- 同样,如果店主想要为所有 Raymond(品牌)衬衫(我假定的类别)打折,同样别无选择,只能对单个产品应用打折。
- 如果只针对特定性别或年龄组打折怎么办?
- 或者衣服尺码
(好吧,我知道我想太多了,因为这种要求的可能性很低。如果存在这么多的要求,使用库或切换到 wordpress/Magento 可能会更好)。
所以我的观点是,虽然将这些折扣附加到单个产品上似乎是一种简单的方法(假设您没有为每种类型的折扣创建数据透视表),但如果您需要更大的灵活性(我个人认为这也很重要。A灵活的项目更容易扩展,将来必须在项目上工作的人会少骂你)保留单个数据透视表并按类型区分它们不是更好吗?(aaargghhh 听起来很痛苦……但是是吗?)
那么 Laravel 有一个解决方案,多态关系。是的,现在您只需要一个用于枢轴的表,然后让 Laravel 发挥作用(好吧,它只是将带有命名空间的模型名称存储在类型列中)。如果您不想使用 Laravels Polymorph,它会变得更加复杂,您需要一个类型表,将每种类型存储在该表中,然后在数据透视表中放置一个外键。
但在加入并选择遵循此方法之前,请考虑一下您是否真的需要它?(我承认大部分都不是你的问题,我只是因为我想太多才提到它)你确定你只需要这两种折扣吗?你能拒绝任何其他类型的请求吗?你不在乎谁来收拾你的烂摊子?如果您的回答是肯定的,那么只需坚持您当前的模式。
所以,选择你觉得更合适的