当前位置: 首页 > news >正文

基于模块自定义扩展字段的后端逻辑实现(二)

目录

一:创建表

二:代码逻辑


上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。

一:创建表

订单主表:

CREATE TABLE `t_order` (
  `order_id` int NOT NULL AUTO_INCREMENT,
  `order_no` char(20) NOT NULL AUTO_INCREMENT,
  `create_user_id` int NOT NULL DEFAULT '0' COMMENT '创建人',
  `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`order_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单主表';

#订单扩展表,扩展的自定义字段主要存储在这张表
CREATE TABLE `t_order_extend` (
  `id` int NOT NULL AUTO_INCREMENT,
  `order_id` int NOT NULL DEFAULT '0' COMMENT '订单ID',
  `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间'
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单扩展表';

#订单表格数据,订单一对多的数据主要存储在这个表,比如商品

CREATE TABLE `t_order_list_extend` (
  `id` int NOT NULL AUTO_INCREMENT,
  `order_id` int NOT NULL DEFAULT '0' COMMENT '订单ID',
  `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单表格数据扩展表';

二:代码逻辑

创建自定义字段部分逻辑

        $count = 1;//定义生成字段数量
            
        //生成字段
        for ($i=0; $i<$count; $i++) {
            //生成字段名
            list($fieldSign,$num) = $this->getFieldSign($request['types']);
            $fieldSignList[] =  $fieldSign;
        }
        

              
        //这里定义一个计数表,用于存储字段的数量,字段的命名以item1,item2,...的方式
        $fieldNum = ExtendFieldNumModel::where('extend_type', $types)->value('extend_num', 1);
        $fieldSign = 'item_'.$fieldNum;
        $fieldWhere = [['field_sign','=', $fieldSign],['types','=',$types]];
        if (ExtendField::where($fieldWhere)->value('field_id')) {
            ExtendFieldNumModel::where('extend_type', $types)->inc('extend_num', 1)->update();
            $this->getFieldSign($types);
        } else {
            //字段计数
            if ($fieldNum == 1) {
                ExtendFieldNumModel::create(['extend_type' => $types,'extend_num' => $fieldNum + 1,
                    'create_time' => time(),'update_time' => time()]);
            } else {
                ExtendFieldNumModel::where('extend_type', $types)->update(['extend_num' => $fieldNum + 1,
                    'update_time' => time()]);
            }
        }
        return [$fieldSign,$fieldNum];

     //插入字段到字段表

        $data = [
            'types'                 => $request['types'],
            'field_name'            => $request['field_name'],
            'field_type'            => $request['field_type'],
            'default_value'         => $request['default_value'] ?? '',
            'is_unique'             => $request['is_unique'] ?? 2,
            'is_require'            => $request['is_require'] ?? 2,
            'create_time'           => time(),
            'update_time'           => time()
        ];

       $data['field_sign'] = count($fieldSignList) == 1 ? $fieldSignList[0] : implode(',', $fieldSignList);
        $fieldId = (new ExtendField())->insertGetId($data);

   //扩展表字段部分代码

                case 'text':
                    $sql[] = "ALTER TABLE `" . $table . "` ADD `" . $fieldSign[0] . "` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '" . $fieldName . "'";
                    break;
                case 'textarea':
                    $sql[] = "ALTER TABLE `" . $table . "` ADD `" . $fieldSign[0] . "` TEXT COMMENT '" . $fieldName . "'";
                    break;

                if ($sql) {
                    foreach ($sql as $sValue) {
                        $resData = Db::execute($sValue);
                        if ($resData === false) {
                            return false;
                        }
                    }
                    return true;
                }

这样我们就实现了,自定义订单模块的数据了,


            

http://www.lryc.cn/news/279454.html

相关文章:

  • 图像中部分RGB矩阵可视化
  • RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用
  • 聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展
  • 记录汇川:H5U与Factory IO测试12
  • PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖
  • 10-skywalking告警
  • vue前端开发自学,插槽练习第二次,name属性的使用
  • AI副业拆解:人像卡通化,赋予你的形象全新生命力
  • 宝塔面板安装MySQL8数据库
  • 中科星图——Landsat9_C2_SR大气校正后的地表反射率数据
  • 使用ros_arduino_bridge控制机器人底盘
  • Nacos下载与安装【windows】
  • 【随笔】遗传算法优化的BP神经网络(随笔,不是很详细)
  • Mysql 嵌套子查询
  • Qt QLabel标签控件
  • iOS14 Widget 小组件调研
  • HarmonyOS的应用类型(FA vs Stage)
  • Jeecg创建表单页面步骤
  • leetcode17 电话号码的字母组合
  • 用html和css实现一个加载页面【究极简单】
  • Android-消息机制Handler
  • MySQL夯实之路-事务详解
  • 安泰电子前置微小信号放大器怎么用的
  • 【深度学习每日小知识】Overfitting 过拟合
  • 嵌入式必备的WEB知识
  • Scipy 中级教程——信号处理
  • 【排序篇2】选择排序、计数排序
  • 重生奇迹mu敏弓加点攻略
  • 用通俗易懂的方式讲解:一文讲透主流大语言模型的技术原理细节
  • 通过IP地址识别风险用户