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

目录

一:创建表

二:代码逻辑


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

一:创建表

订单主表:

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.mzph.cn/news/610405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode C/C++(gdb)调试指南

1、安装插件 2、F5开启调试 左侧侧边栏->确保打开回调栈 右键函数栈->查看反汇编 3、打印寄存器、函数反汇编等 命令&#xff1a; 查看main反汇编 -exec disassemble /m main 查看寄存器 -exec info r 打印某个变量 -exec print s 或者 --s 打印寄存器&#xff0c;如p…

如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置

您想知道如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置吗&#xff1f; 出厂重置 iPhone 13/14/15 成为所有 iPhone 机型中最简单的。大多数情况下&#xff0c;iPhone 13/14/15 是在 iOS 15 或更高版本的 iOS 版本上&#xff0c;Apple 更新了无需密码重置 iPhone 13/…

nodejs 服务端token 高效缓存验证

在前后端分离开发过程中,经常涉及权限验证的问题,一般都是采用由服务端根据前端传递的用户名和密码,验证成功后生成token,然后前端在访问服务端接口时,再附带token访问。 如果服务端高频次的解析token,进行内容验证,则会大大降低接口性能,而采用内存或者redis进行合法…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计&#xff0c;可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

GAMES101-Assignment5

一、问题总览 在这次作业中&#xff0c;要实现两个部分&#xff1a;光线的生成和光线与三角的相交。本次代码框架的工作流程为&#xff1a; 从main 函数开始。我们定义场景的参数&#xff0c;添加物体&#xff08;球体或三角形&#xff09;到场景中&#xff0c;并设置其材质&…

项目管理:风险的来源及管理方法

项目风险是项目管理中的难点之一&#xff0c;虽然我们无法将其完全消除&#xff0c;但可以提前做好准备&#xff0c;将风险降至最低。 项目风险如同暗礁潜伏&#xff0c;你和团队需时刻保持警惕。以下几种风险需特别关注&#xff1a; 措施不足&#xff1a;成本与行动的误差&…

Python 基础(三):字符串

目录 简介2 基本操作2.1 访问2.2 单个字符编码 3 转义符4 运算符5 格式化 简介 之前我们已经提到了&#xff1a;字符串是 Python 的一种数据类型&#xff0c;它可以通过单引号 ‘、双引号 "、三引号 ‘’’ 或 “”" 来定义&#xff0c;本节我们来详细介绍一下。 2…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机&#xff0c;测试中国芯&#xff01;新年伊始&#xff0c;国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻&#xff0c;ST2500 数模混合信号测试设备累计装机量突破500台&#xff01;加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

软件定义存储

软件定义存储源于VMware公司于2012年提出的软件定义的数据中心&#xff08;SDDC&#xff09;。存储作为软件定义的数据中心不可或缺的一部分&#xff0c;其以虚拟化为基础&#xff0c;但又不仅限于虚拟化。存储虚拟化一般只能在专门的硬件设备上应用&#xff0c;很多设备都是经…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案&#xff0c;用于录制、转换和流式传输音频和视频。 EasyDarwin软件&#xff1a;Download Easy…

实习周志实习生实习报告总结定

第一周&#xff1a; 这是我作为前端实习生的第一周&#xff0c;充满了新奇和挑战。在这周里&#xff0c;我主要熟悉了公司的前端开发环境和项目代码结构。我参与了小组的日常会议&#xff0c;了解了当前项目的进展和团队成员的分工。 遇到的问题&#xff1a; 在初始的学习阶…

企业小文件多传输慢怎么办?怎么解决海量小文件传输慢的问题?

在当今信息时代&#xff0c;许多企业在文件传输过程中普遍面临一个棘手问题——小文件传输缓慢。这不仅对企业工作效率产生不良影响&#xff0c;还可能导致运营成本增加以及数据遗失与损坏的风险。那么&#xff0c;企业应该如何解决海量小文件传输缓慢的问题呢&#xff1f;本文…

高压MOS在适配器产品上的应用-REASUNOS瑞森半导体

一、适配器定义 电源适配器&#xff0c;英文Adapter通常指AC-DC&#xff08;由交流输入转换为直流输出&#xff09;的开关电源&#xff1b;一般由控制 IC、MOS管、整流肖特基管、电阻电容、磁性材料、DC 线、外壳等元器件及部件组成&#xff0c;通过整流、变压和稳压等转换形式…

2024系统分析师---论设计模式及其应用

摘要&#xff1a; 本人于2018年1月参与了中石化XX油田XX采油厂“用电管理系统”的项目建设&#xff0c;该系统建设目标是实现分单位、分线路、分系统评价、优化、考核&#xff0c;全面提升采油厂用电管理水平。在该项目组中我担任系统架构师一职&#xff0c;主要负责系统整体架…

第1章 引言

目录 1. 鸢尾花分类1.1 初识数据1.2 衡量模型是否成功&#xff1a;训练数据与测试数据1.3 要事第一&#xff1a;观察数据1.4 构建第一个模型&#xff1a;k近邻算法&#xff08;KNeighborsClassifier&#xff09;1.5 做出预测&#xff08;predict&#xff09;1.6 评估模型 1. 鸢…

【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环

请认真看看以下延时函数是否正确&#xff0c;并且指出错误&#xff1a;&#xff08;考考C语言功底&#xff09; void delay_ms(unsigned int xms) //delay x ms {unsigned int x,y;for(xxms;x>0;x--)for(y124;y>0;y--); }废话少说&#xff0c;上正确代码&#xff1a; v…

C++ 数据结构

C/C 数组允许定义可存储相同类型数据项的变量&#xff0c;但是结构是 C 中另一种用户自定义的可用的数据类型&#xff0c;它允许您存储不同类型的数据项。 结构用于表示一条记录&#xff0c;假设您想要跟踪图书馆中书本的动态&#xff0c;您可能需要跟踪每本书的下列属性&…

青少年软件编程(C/C++)等级考试试卷(二级)2023年12月

202312 青少年软件编程&#xff08;C/C&#xff09;等级考试试卷&#xff08;二级&#xff09;电子学会真题 编程题 1.统计指定范围里的数 给定一个数的序列S&#xff0c;以及一个区间[L, R], 求序列中介于该区间的数的个数&#xff0c;即序列中大于等于L且小于等于R的数的个…

linux ftp服务选择与ftp(vsftpd,Pure-FTPd)服务安装使用教程

一 linux ftp常用的服务软件 在Linux系统中&#xff0c;最常用的ftp有vsftpd&#xff0c;Pure-FTPd&#xff0c;ProFTPd&#xff0c;Wu-FTPd&#xff0c;glftpd&#xff0c;他们的特性优缺点如下对比图&#xff1a; 常用的5款linux ftp对比图&#xff1a; 软件特性优点缺点vsf…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity&#xff08;以及C#编程语言中&#xff09;&#xff0c; ref 和 out 都是用来传递参数的引用&#xff0c;这意味着它们允许函数修改实参变量&#xff0c;并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…