动态模型介绍
动态模型主要用于动态增加文章字段而不需要修改代码重新编译
管理动态模型
在系统工具 -> 模型管理中增加或修改模型信息
设置模型字段
生成模型
生成模型会先备份当前模型表数据到 /resource/data下,删除数据库表,重新创建当前模型表,需要原来的表数据的话可以手动通过备份的sql恢复,如果修改了字段则需要手动修改sql中对应的字段数据差异
使用动态模型
请参考cmsArticle中的使用代码, 必须的字段 relation_id 用于存储关联的表中ID,如cms_article表中的id。relation_table 字段用于标记该条记录是存放哪个关联数据表的。
当需要查询动态模型的内容时便可以通过 relation_table,relation_id ,来查询数据。
动态模型接口
service接口文件 internal/app/system/service/modules_data.go
// Get
// @Description: 获取模型表数据
// @param ctx 上下文对象
// @param moduleTableName 模型表名
// @param relationTable 关联表名
// @param relationId 关联表主键ID
// @return res
// @return err
Get(ctx context.Context, moduleTableName string, relationTable string, relationId uint64) (res gdb.Record, err error)
// Add
// @Description: 增加模型表数据
// @param ctx 上下文对象
// @param moduleTableName 模型表名
// @param modulesData 模型表数据
// @return err
Add(ctx context.Context, moduleTableName string, modulesData g.Map) (err error)
// Edit
// @Description: 修改模型表数据
// @param ctx 上下文对象
// @param moduleTableName 模型表名
// @param modulesData 模型数据
// @return err
Edit(ctx context.Context, moduleTableName string, modulesData g.Map) (err error)
// Delete
// @Description: 删除模型表数据
// @param ctx 上下文对象
// @param moduleTableName 模型表名
// @param relationTable 关联表名
// @param relationIds 关联表主键ID
// @return err 错误信息
Delete(ctx context.Context, moduleTableName string, relationTable string, relationIds uint64) (err error)
获取动态模型示例
modulesData = make(g.Map, 0)
// 获取动态模型信息
moduleInfo, _ := systemService.ModulesInfo().GetById(ctx, res.ModuleId)
if moduleInfo != nil {
modulesField, _ := systemService.ModulesField().List(ctx, &system.ModulesFieldSearchReq{
ModuleId: res.ModuleId,
PageReq: commonApi.PageReq{
PageReq: model3.PageReq{
PageSize: 200,
PageNum: 1,
},
},
})
if modulesField != nil {
// 获取模型内容
modulesData, _ := systemService.ModulesData().Get(ctx, moduleInfo.TableName, dao.CmsArticle.Table(), res.Id)
modulesDataMap := modulesData.Map()
for _, listRes := range modulesField.List {
if moduleValue, ok := modulesDataMap[listRes.Name]; ok {
str := gconv.String(moduleValue)
tValue := &model2.ModulesFieldValueRes{
Label: listRes.Label,
Name: listRes.Name,
Type: listRes.Type,
Sort: listRes.Sort,
Options: listRes.Options,
FieldLength: listRes.FieldLength,
Value: str,
}
if gregex.IsMatchString(`^\[\{|^\[`, str) {
tValue.Value, _ = gjson.Decode([]byte(str))
}
// 将解析后的模型内容存到map对象里
modulesData[listRes.Name] = tValue
}
}
}
}
注意事项
1、动态模型中的日期时间字段在插入或修改时不能为空,否则可能会报错。
作者:袁学飞 创建时间:2024-02-23 16:38
最后编辑:袁学飞 更新时间:2024-05-23 09:03
最后编辑:袁学飞 更新时间:2024-05-23 09:03