功能调优【TP5关联模型】-记一次排班人员表优化过程 - 东南西北

东南西北

整理 思考 行动

功能调优【TP5关联模型】-记一次排班人员表优化过程

首页 编程 0 评

业务情景

对一个店铺的人员进行排班,一班以小时为单位,同一班可有多位店员。

数据表设计

think_scheduling
图像 1.png

第一版本实现

这种表设计发现不能用TP5的关联模型来解决,需要用原始的sql才能实现功能(比如:left join)

第二版本-通过关联模型实现

将表重新调整如下:
think_scheduling
将该表的cherkids删除,新建一张map表来关联店员,于是新建think_scheduling_clerk。
think_scheduling_clerk
图像 2.png

整理一下思路

排班表think_scheduling和排班员工关联表think_scheduling_clerk是一对多的关系,于是我们得到如下关联函数:

 public function schedulingClerk()
    {
        return $this->hasMany("SchedulingClerk","schedulingid");
    }

排班员工关联表think_scheduling_clerk和员工表think_clerk是一对一的关系,于是我们得到如下关联函数:

 public function clerk(){
        return $this->belongsTo("Clerk","clerkid","id");
    }

完整查询语句如下:

$m=new SchedulingModel();
        $list   = $m->with(['company','shop','schedulingClerk'=>['clerk']])->where('isdelete',0)->order(['id' => 'ASC'])->paginate(15, false, ['page' => $page]);

最终效果

图像 4.png

一次性将5个表的数据放到了一行。

总结

TP5的关联模型是非常强大的,我们在表设计的时候尽量多采用map表进行终止,降低开发的难度,从而方便项目的维护。

框架学习【Spring Boot】-Hello World