当前位置: 首页 > 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;
                }

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


            

相关文章:

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

目录 一&#xff1a;创建表 二&#xff1a;代码逻辑 上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计&#xff0c;这一节我们以一个具体例子演示下&#xff0c;如何实现一个订单模块的自定义扩展数据。 一&#xff1a;创建表 订单主表: CREATE TABLE t_order ( …...

图像中部分RGB矩阵可视化

图像中部分RGB可视化 今天室友有个需求就是模仿下面这张图画个示意图&#xff1a; 大致就是把图像中的一小部分区域的RGB值可视化了一下。他居然不知道该怎么画&#xff0c;我寻思这不直接秒了。 import cv2 as cv import numpy as np import matplotlib.pyplot as pltclass …...

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…...

聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展

尊老敬老是中华民族的传统美德&#xff0c; 爱老助老是全社会的共同责任。 家有一老&#xff0c;如有一宝&#xff0c; 长者的生活情况是一个家庭的头等大事&#xff0c; 做好长者服务是街道和社区的重要工作。 2024年1月6日&#xff0c;由元岗街道党工委、元岗街道办事处、…...

记录汇川:H5U与Factory IO测试12

主程序&#xff1a; 子程序&#xff1a; IO映射 子程序&#xff1a; 辅助出料 子程序&#xff1a; 自动程序 Factory IO配置&#xff1a; 实际动作如下&#xff1a; Factory IO测试12...

PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖

2023 年 12 月&#xff0c;2023 国际测试委员会智能计算与芯片联邦大会&#xff08;FICC 2023&#xff09;在海南三亚举办&#xff0c;中外院士和数十位领域专家莅临出席。 大会现场 &#xff0c;开放源代码促进会创始人 Bruce Perens 颁发了 Open100 世纪全球开源贡献奖&…...

10-skywalking告警

https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md 5.1&#xff1a;告警指标 ~$ vim /apps/apache-skywalking-apm-bin/config/oal/core.oal service_resp_time # 服务的响应时间 service_sla # 服务http请求成功率SLV&#xff0c;比…...

vue前端开发自学,插槽练习第二次,name属性的使用

vue前端开发自学,插槽练习第二次,name属性的使用!可以使用name属性&#xff0c;来自定义一个名字&#xff0c;这样&#xff0c;就可以在一个组件内同时出现多个插槽的内容了。在子组件内接收的时候&#xff0c;很简答&#xff0c;只需要在slot标签里面加上name“mz”&#xff1…...

AI副业拆解:人像卡通化,赋予你的形象全新生命力

大家好我是在看&#xff0c;记录普通人学习探索AI之路。 &#x1f525;让你的形象瞬间穿越二次元&#xff01;&#x1f680;人像卡通化&#xff0c;捕捉你的独特魅力&#xff0c;让真实与梦幻在此刻交融。&#x1f3a8; 今天为大家介绍如何免费把人像卡通化--漫画风 https://w…...

宝塔面板安装MySQL8数据库

第一步&#xff1a;搜索mysql 第二步: 点击安装 我这里选择安装8版本 第三步&#xff1a;给宝塔配置mysql防火墙 第四步&#xff1a;修改数据库密码 第五步&#xff1a;想要使用navicat连接 需要修改root的权限 &#xff08;1&#xff09;使用secureCRT先登录mysql (2) 输入u…...

中科星图——Landsat9_C2_SR大气校正后的地表反射率数据

数据名称&#xff1a; Landsat9_C2_SR 数据来源&#xff1a; USGS 时空范围&#xff1a; 2022年1月-2023年3月 空间范围&#xff1a; 全国 数据简介&#xff1a; Landsat9_C2_SR数据集是经大气校正后的地表反射率数据&#xff0c;属于Collection2的二级数据产品&#…...

使用ros_arduino_bridge控制机器人底盘

使用ros_arduino_bridge控制机器人底盘 搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano&#xff0c;就可以在PC端通过键盘控制小车的运动了。实现流程如下&#xff1a; 系统准备&#xff1b;下载程序&#xff1b;程序修改&#xff1b;分别启动PC与Jetson…...

Nacos下载与安装【windows】

&#x1f95a;今日鸡汤&#x1f95a; 我不知将去何方&#xff0c;但我已经在路上。 ——宫崎骏《千与千寻》 目录 &#x1f95e;1.Nacosdi地址 &#x1f32d;2.GitHub下载 &#x1f37f;3.目录结构 &#x1f953;4.启动nacos &#x1f9c2;5.客户端登陆 &#x1f9c8…...

【随笔】遗传算法优化的BP神经网络(随笔,不是很详细)

文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络&#xff08;Backpropagation Neural Network&#xff0c;反向传播神经网络&#xff09;是一种监…...

Mysql 嵌套子查询

文章目录 子查询 大家好&#xff01;我是夏小花&#xff0c;今天是2024年1月13日|腊月初三 子查询 需求是&#xff1a;最外层的查询语句里面包含四个不相同表的查询&#xff0c;根据月份进行关联查询&#xff0c;每个查询语句中的where条件可以自行去定义,最后返回数量和月份 …...

Qt QLabel标签控件

文章目录 1 属性和方法1.1 文本1.2 对齐方式1.3 换行1.4 图像 2. 实例2.1 布局2.2 为标签添加背景色2.3 为标签添加图片2.4 代码实现 QLabeI是Qt中的标签类&#xff0c;通常用于显示提示性的文本&#xff0c;也可以显示图像 1 属性和方法 QLabel有很多属性&#xff0c;完整的可…...

iOS14 Widget 小组件调研

桌面小组件是iOS14推出的一种新的桌面内容展现形式。 根据苹果的统计数据&#xff0c;“一般用户每天进入主屏幕的次数超过90次”&#xff0c;如果有一个我们应用的小组件在桌面&#xff0c;每天都有超过90次曝光在用户眼前的机会&#xff0c;这绝对是一个顶级的流量入口。 “…...

HarmonyOS的应用类型(FA vs Stage)

HarmonyOS目前提供两种应用模型 FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推。 Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的…...

Jeecg创建表单页面步骤

1.在Online表单开发里面新建一个表单页面&#xff0c;可以修改数据库属性、页面属性、校验字段、外键、索引&#xff0c;新建完成之后然后同步数据库 2.选中该表&#xff0c;然后生成代码&#xff0c;可以先把代码放在桌面&#xff0c;然后将文件夹是包名称的文件复制到后端代…...

leetcode17 电话号码的字母组合

方法1 if-else方法 if-else方法的思路及其简单粗暴&#xff0c;如下图所示&#xff0c;以数字234为例&#xff0c;数字2所对应的字母是abc&#xff0c;数字3所对应的是def&#xff0c;数字4所对应的是ghi&#xff0c;最后所产生的结果就类似于我们中学所学过的树状图一样&…...

微信小程序获取手机号登录,从免费到收费后,我的低成本替代方案(附完整代码)

微信小程序登录策略优化&#xff1a;从手机号收费到低成本用户体系设计 去年微信团队调整了小程序获取用户手机号的规则——从完全免费变为1000次调用后的按量计费。这对于日活超过1000的中小开发者来说&#xff0c;意味着每月可能新增数百至数千元的额外成本。但用户登录又是小…...

如何利用多渠道SEO推广提高网站流量

<h2>多渠道SEO推广&#xff1a;如何提高网站流量</h2> <p>在当前竞争激烈的互联网环境中&#xff0c;网站流量是衡量网站成功与否的重要指标之一。如何利用多渠道SEO推广提高网站流量&#xff0c;成为了每一个网站运营者关注的焦点。本文将从问题分析、原因说…...

Fish Speech 1.5开源大模型落地:为乡村学校定制方言普通话双语教学语音

Fish Speech 1.5开源大模型落地&#xff1a;为乡村学校定制方言普通话双语教学语音 想象一下&#xff0c;在偏远山区的教室里&#xff0c;孩子们正跟着一个亲切的“本地老师”学习普通话。这位老师不仅能说一口标准的普通话&#xff0c;还能用孩子们熟悉的家乡方言进行解释和互…...

告别电台收听难题:foobox-cn网络电台收听方案

告别电台收听难题&#xff1a;foobox-cn网络电台收听方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn作为foobar2000的DUI皮肤&#xff08;桌面用户界面定制方案&#xff09;&#xff0…...

文脉定序系统处理多语言语义排序实战:跨语言检索效果展示

文脉定序系统处理多语言语义排序实战&#xff1a;跨语言检索效果展示 你有没有遇到过这样的烦恼&#xff1f;想找一份关于“机器学习”的日文资料&#xff0c;却只能用中文关键词去搜&#xff0c;结果要么搜不到&#xff0c;要么搜出来的东西完全不对路。或者&#xff0c;你手…...

智能缓存加速:重新定义扩散模型推理效率

智能缓存加速&#xff1a;重新定义扩散模型推理效率 【免费下载链接】ComfyUI-TeaCache 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-TeaCache 在AI创作领域&#xff0c;等待成为最大的创作阻力。当你使用扩散模型生成图像或视频时&#xff0c;是否曾因漫长的…...

从‘下载失败弹个错’到‘优雅的用户体验’:前端文件下载错误处理与PDF预览的进阶实践

从‘下载失败弹个错’到‘优雅的用户体验’&#xff1a;前端文件下载错误处理与PDF预览的进阶实践 在当今的Web应用中&#xff0c;文件下载功能几乎是每个系统的标配。然而&#xff0c;很多开发者往往只关注功能的实现&#xff0c;而忽略了异常处理和用户体验的细节。当用户点…...

AI 创作者指南:09.AI 作为你的创作运营助理

第 9 篇 AI 作为你的创作运营助理 多模态魔法刚玩完,你现在一篇文章能变10种形态,是不是已经觉得内容像会“分身术”了?😊 来,第三部分继续!第9篇——AI 作为你的创作运营助理。 以前你自己盯排期、想矩阵、试标题,累得像管家婆。现在AI直接当你的“运营小秘书”,帮你…...

Scarab:基于Avalonia的跨平台空洞骑士模组管理器架构解析

Scarab&#xff1a;基于Avalonia的跨平台空洞骑士模组管理器架构解析 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》游戏设计的跨平台模组管理器…...

通义千问1.5-1.8B-Chat-GPTQ-Int4 卷积神经网络(CNN)原理入门:模型辅助理解AI视觉基础

通义千问1.5-1.8B-Chat-GPTQ-Int4 卷积神经网络&#xff08;CNN&#xff09;原理入门&#xff1a;模型辅助理解AI视觉基础 你是不是经常看到“AI识别图片”、“自动驾驶看路”、“手机相册自动分类”这些功能&#xff0c;然后好奇它们是怎么做到的&#xff1f;其实&#xff0c…...