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

目录

一:创建表

二:代码逻辑


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

一:创建表

订单主表:

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;

}

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

相关推荐
毛驴赶鹿40 分钟前
【金仓数据库征文】KES V9性能调优实战记录:从慢SQL排查到全链路优化
数据库·sql
XR1234567881 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
码农阿豪1 小时前
【金仓数据库征文】Mac开发环境|SpringBoot3 + MyBatisPlus对接KES V9 Docker实战全指南
数据库·macos·docker
杨云龙UP1 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
ZENERGY-众壹1 小时前
500个工商业电站压垮数据库?海量光伏时序数据存储的架构取舍
数据库·架构·influxdb·光伏·光伏运维
現実君2 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1232 小时前
SpringDAO的用法
java·开发语言·数据库
星蓝_starblue5 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
三8447 小时前
sqli-labs1-10通关笔记
数据库
宁小法8 小时前
php - request_terminate_timeout解释
php·php-fpm·进程终止·请求终止超时