基于模块自定义扩展字段的后端逻辑实现(二)
目录
一:创建表
二:代码逻辑
上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。
一:创建表
订单主表:
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;
}
这样我们就实现了,自定义订单模块的数据了,

相关文章:
基于模块自定义扩展字段的后端逻辑实现(二)
目录 一:创建表 二:代码逻辑 上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。 一:创建表 订单主表: CREATE TABLE t_order ( …...
图像中部分RGB矩阵可视化
图像中部分RGB可视化 今天室友有个需求就是模仿下面这张图画个示意图: 大致就是把图像中的一小部分区域的RGB值可视化了一下。他居然不知道该怎么画,我寻思这不直接秒了。 import cv2 as cv import numpy as np import matplotlib.pyplot as pltclass …...
RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用
目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷,但现有研究成果主要集中在财务业务单一领域,缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理,无论从自身技术发展,或…...
聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展
尊老敬老是中华民族的传统美德, 爱老助老是全社会的共同责任。 家有一老,如有一宝, 长者的生活情况是一个家庭的头等大事, 做好长者服务是街道和社区的重要工作。 2024年1月6日,由元岗街道党工委、元岗街道办事处、…...
记录汇川:H5U与Factory IO测试12
主程序: 子程序: IO映射 子程序: 辅助出料 子程序: 自动程序 Factory IO配置: 实际动作如下: Factory IO测试12...
PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖
2023 年 12 月,2023 国际测试委员会智能计算与芯片联邦大会(FICC 2023)在海南三亚举办,中外院士和数十位领域专家莅临出席。 大会现场 ,开放源代码促进会创始人 Bruce Perens 颁发了 Open100 世纪全球开源贡献奖&…...
10-skywalking告警
https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md 5.1:告警指标 ~$ vim /apps/apache-skywalking-apm-bin/config/oal/core.oal service_resp_time # 服务的响应时间 service_sla # 服务http请求成功率SLV,比…...
vue前端开发自学,插槽练习第二次,name属性的使用
vue前端开发自学,插槽练习第二次,name属性的使用!可以使用name属性,来自定义一个名字,这样,就可以在一个组件内同时出现多个插槽的内容了。在子组件内接收的时候,很简答,只需要在slot标签里面加上name“mz”࿱…...
AI副业拆解:人像卡通化,赋予你的形象全新生命力
大家好我是在看,记录普通人学习探索AI之路。 🔥让你的形象瞬间穿越二次元!🚀人像卡通化,捕捉你的独特魅力,让真实与梦幻在此刻交融。🎨 今天为大家介绍如何免费把人像卡通化--漫画风 https://w…...
宝塔面板安装MySQL8数据库
第一步:搜索mysql 第二步: 点击安装 我这里选择安装8版本 第三步:给宝塔配置mysql防火墙 第四步:修改数据库密码 第五步:想要使用navicat连接 需要修改root的权限 (1)使用secureCRT先登录mysql (2) 输入u…...
中科星图——Landsat9_C2_SR大气校正后的地表反射率数据
数据名称: Landsat9_C2_SR 数据来源: USGS 时空范围: 2022年1月-2023年3月 空间范围: 全国 数据简介: Landsat9_C2_SR数据集是经大气校正后的地表反射率数据,属于Collection2的二级数据产品&#…...
使用ros_arduino_bridge控制机器人底盘
使用ros_arduino_bridge控制机器人底盘 搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano,就可以在PC端通过键盘控制小车的运动了。实现流程如下: 系统准备;下载程序;程序修改;分别启动PC与Jetson…...
Nacos下载与安装【windows】
🥚今日鸡汤🥚 我不知将去何方,但我已经在路上。 ——宫崎骏《千与千寻》 目录 🥞1.Nacosdi地址 🌭2.GitHub下载 🍿3.目录结构 🥓4.启动nacos 🧂5.客户端登陆 🧈…...
【随笔】遗传算法优化的BP神经网络(随笔,不是很详细)
文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络(Backpropagation Neural Network,反向传播神经网络)是一种监…...
Mysql 嵌套子查询
文章目录 子查询 大家好!我是夏小花,今天是2024年1月13日|腊月初三 子查询 需求是:最外层的查询语句里面包含四个不相同表的查询,根据月份进行关联查询,每个查询语句中的where条件可以自行去定义,最后返回数量和月份 …...
Qt QLabel标签控件
文章目录 1 属性和方法1.1 文本1.2 对齐方式1.3 换行1.4 图像 2. 实例2.1 布局2.2 为标签添加背景色2.3 为标签添加图片2.4 代码实现 QLabeI是Qt中的标签类,通常用于显示提示性的文本,也可以显示图像 1 属性和方法 QLabel有很多属性,完整的可…...
iOS14 Widget 小组件调研
桌面小组件是iOS14推出的一种新的桌面内容展现形式。 根据苹果的统计数据,“一般用户每天进入主屏幕的次数超过90次”,如果有一个我们应用的小组件在桌面,每天都有超过90次曝光在用户眼前的机会,这绝对是一个顶级的流量入口。 “…...
HarmonyOS的应用类型(FA vs Stage)
HarmonyOS目前提供两种应用模型 FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推。 Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的…...
Jeecg创建表单页面步骤
1.在Online表单开发里面新建一个表单页面,可以修改数据库属性、页面属性、校验字段、外键、索引,新建完成之后然后同步数据库 2.选中该表,然后生成代码,可以先把代码放在桌面,然后将文件夹是包名称的文件复制到后端代…...
leetcode17 电话号码的字母组合
方法1 if-else方法 if-else方法的思路及其简单粗暴,如下图所示,以数字234为例,数字2所对应的字母是abc,数字3所对应的是def,数字4所对应的是ghi,最后所产生的结果就类似于我们中学所学过的树状图一样&…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
