有没有“远程多态”?

先说下业务场景,一个外卖系统,会卖现做吃食以及包装好的零食酒水。

  • 有订单,订单分线下订单,线上美团订单,线上饮了么订单…等。
  • 收到订单后由人工转交给其他的处理程序
  • 可能交给后厨现做,可能交给采购买完直接发给顾客,可能交给仓库直接取货发给顾客。

按如下方式设计基础模型

  • 线下订单( order_offline) 有订单ID (id)。订单编号(order_sn)。
  • 线上美团订单( order_meituan) 有订单ID (id)。订单编号(order_sn)。
  • 线上美团订单( order_ele) 有订单ID (id)。订单编号(order_sn)。
  • 后厨(kitchen), 有上级订单(ParentOrder)
  • 采购员(buyer), 有上级订单(ParentOrder)
  • 库房(store), 有上级订单(ParentOrder)

现在的要求是

  1. 使用 Eloquent 模型来定义。
  2. 通过订单可以快速查找到转交给谁处理了,以及转交后处理的详情,比如转给后厨了能关联到后厨表以展示后厨表中的厨师和操作状态等。
  3. 后厨、采购、库房之类,要能快速找到他们处理的订单的原始详情(线下,美团)。
  4. 可以使用模型的关联 saveupdate 简化新建保存和更新过程。
  5. 订单与处理程序是一对一的,也就一个订单如果交给后厨了,就一定不会再给库房。一个订单只会在后厨处理程序中生成一条加工主记录。一条后厨加工主记录必定有且只有一条订单(线下,线上美团,饿了么之一)与之对应。

初步分析了一下,一个订单可能交给三个处理程序之一, 一个处理程序的单据可能来自三个来源订单之一。
是不是需要在订单与转交程序间设计一个中间表?如果设计中间表的话,有远程一对一,但远程一对一的两个模型是确定的,并不多态。
所以,需要一个远程多态?还是需要如何设计这个模型?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

我仔细看了,说说我的想法。 第一个是 orders 表,其中有三种类型的订单。通过 type 来区分。 第二个是 handlers 表,其中有一个外键 order_id。 这样一个 orders 就拥有多个(其实是一个) handler,也就形成了 hasOne 关系。

在 Order Model 中,可以这样:

public function handler () {
    return $this->hasOne(\App\Models\Handler::class);
}
2年前 评论

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