异动商品会影响到订单内的商品

order 表中有将收货地址使用 json 格式快照起来,避免地址被异动后因外键连接异动而影响到订单地址,但是在 order_item 表中與商品、SKU 却还是用外键连接,这样不是就会因商品异动导致订单资讯有误、甚至被删除吗?

database/migrations/< your_date >_create_order_items_table.php

$table->unsignedBigInteger('product_id');  
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');  

$table->unsignedBigInteger('product_sku_id');  
$table->foreign('product_sku_id')->references('id')->on('product_skus')->onDelete('cascade');

我目前有想到两种解法,想了解一般会如何解决这个问题?

  1. order_item 表上将商品、SKU 快照存起来,保留 product_idproduct_sku_id ,但不加上 .onDelete('cascade')。这样就可以在商品异动时不会影响到订单上的商品 (订单上就只显示快照的内容,而点击订单上的商品一样能连到商品的主页)。
  2. 在商品上架过(或有成立订单)之后,就禁止异动及删除商品、SKU ,仅能将商品下架。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1
leo

这里确实有这个问题,鉴于 Laravel-Admin 无法屏蔽 SKU 的删除按钮(或者说实现成本比较高),所以本课程就省略了这部分的逻辑。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!