当前位置: 首页 > article >正文

goframe 博客分类文章模型文档 主要解决关联

goframe 博客文章模型文档

模型结构 (BlogArticleInfoRes)

BlogArticleInfoRes 结构体代表系统中的一篇博客文章,包含完整的元数据和内容管理功能。

type BlogArticleInfoRes struct {
    Id          uint         `orm:"id,primary" json:"id"`           // 唯一标识符
    Title       string       `orm:"title" json:"title"`             // 文章标题
    Content     string       `orm:"content" json:"content"`         // 文章内容
    Summary     string       `orm:"summary" json:"summary"`         // 文章摘要
    CategoryId  int          `orm:"category_id" json:"categoryId"`  // 分类ID
    Tags        string       `orm:"tags" json:"tags"`               // 文章标签
    Cover       string       `orm:"cover" json:"cover"`             // 封面图片URL
    ViewCount   int          `orm:"view_count" json:"viewCount"`    // 浏览次数
    Status      int          `orm:"status" json:"status"`           // 文章状态
    CreatedAt   *gtime.Time  `orm:"created_at" json:"createdAt"`   // 创建时间
    UpdatedAt   *gtime.Time  `orm:"updated_at" json:"updatedAt"`   // 更新时间
    IsTop       int          `orm:"is_top" json:"isTop"`           // 是否置顶
    Author      string       `orm:"author" json:"author"`           // 文章作者
    Category    *LinkedCategory `orm:"with:id=category_id" json:"category"` // 关联分类
}

字段说明

字段名类型JSON标签ORM标签描述
Iduintjson:“id”orm:“id,primary”文章唯一标识符
Titlestringjson:“title”orm:“title”文章标题
Contentstringjson:“content”orm:“content”文章主要内容
Summarystringjson:“summary”orm:“summary”文章简短摘要
CategoryIdintjson:“categoryId”orm:“category_id”文章分类ID
Tagsstringjson:“tags”orm:“tags”文章标签(逗号分隔)
Coverstringjson:“cover”orm:“cover”文章封面图片URL
ViewCountintjson:“viewCount”orm:“view_count”文章浏览次数
Statusintjson:“status”orm:“status”文章状态
CreatedAt*gtime.Timejson:“createdAt”orm:“created_at”文章创建时间戳
UpdatedAt*gtime.Timejson:“updatedAt”orm:“updated_at”最后更新时间戳
IsTopintjson:“isTop”orm:“is_top”是否置顶文章
Authorstringjson:“author”orm:“author”文章作者名称

关联关系说明

该模型通过 Category 字段与分类模型建立一对一关系:

Category *LinkedCategory `orm:"with:id=category_id" json:"category"`

ORM关联标签解析

  • with: 指定关联条件
  • id=category_id 表示当前模型的 category_id 字段与分类模型的 id 字段关联
  • 查询时自动进行数据库表连接

查询示例

func (s *sBlogArticle) GetArticleWithCategory(ctx context.Context, articleId uint) (*model.BlogArticleInfoRes, error) {
    var articleInfo *model.BlogArticleInfoRes
    err := dao.BlogArticle.Ctx(ctx).WithAll().Where("id", articleId).Scan(&articleInfo)
    if err != nil {
        return nil, err
    }
    
    // articleInfo.Category 将自动包含关联的分类信息
    return articleInfo, nil
}

状态值说明

  • 0: 草稿
  • 1: 已发布
  • 2: 审核中
  • 3: 已拒绝

置顶值说明

  • 0: 普通文章
  • 1: 置顶文章

该模型结构为博客文章管理提供了强大的基础,支持分类、标签和元数据跟踪等功能。

分类模型结构 (CmsCategoryInfoRes)

分类模型用于管理博客文章的分类信息,支持多级分类和SEO优化。

type CmsCategoryInfoRes struct {
    gmeta.Meta      `orm:"table:cms_category"`
    Id              uint        `orm:"id,primary" json:"id"`           // ID
    Name            string      `orm:"name" json:"name"`               // 名称
    Type            string      `orm:"type" json:"type"`               // 类型
    ParentId        uint        `orm:"parent_id" json:"parentId"`      // 父ID
    Sort            int         `orm:"sort" json:"sort"`               // 排序
    Status          string      `orm:"status" json:"status"`           // 状态
    Alias           string      `orm:"alias" json:"alias"`             // 别名
    CreatedAt       *gtime.Time `orm:"created_at" json:"createdAt"`    // 创建时间
    UpdatedAt       *gtime.Time `orm:"updated_at" json:"updatedAt"`    // 更新时间
}

分类字段说明

字段名类型描述
Iduint分类唯一标识符
Namestring分类名称
Typestring分类类型
ParentIduint父分类ID,用于构建分类层级
Sortint排序权重
Statusstring分类状态
Aliasstring分类别名,用于URL优化
CreatedAt*gtime.Time创建时间
UpdatedAt*gtime.Time更新时间

分类特性

  1. 多级分类

    • 通过 ParentId 支持无限级分类
    • 可以构建复杂的分类层级结构
  2. URL优化

    • 支持别名设置,优化URL结构
    • 更友好的SEO支持
  3. 状态管理

    • 可设置分类状态
    • 支持分类的启用/禁用管理

查询示例

// 获取分类及其子分类
func (s *sCmsCategory) GetCategoryWithChildren(ctx context.Context, categoryId uint) (*model.CmsCategoryInfoRes, error) {
    var category *model.CmsCategoryInfoRes
    err := dao.CmsCategory.Ctx(ctx).
        Where("id", categoryId).
        Scan(&category)
    if err != nil {
        return nil, err
    }
    
    // 获取子分类
    children, err := dao.CmsCategory.Ctx(ctx).
        Where("parent_id", categoryId).
        Order("sort asc").
        All()
    if err != nil {
        return nil, err
    }
    
    // 处理子分类...
    return category, nil
}

// 获取分类树
func (s *sCmsCategory) GetCategoryTree(ctx context.Context) ([]*model.CmsCategoryInfoRes, error) {
    // 获取所有分类
    categories, err := dao.CmsCategory.Ctx(ctx).
        Order("sort asc").
        All()
    if err != nil {
        return nil, err
    }
    
    // 构建分类树
    return buildCategoryTree(categories), nil
}

与文章模型的关联

文章模型通过 CategoryId 关联到分类模型:

Category *CmsCategoryInfoRes `orm:"with:id=category_id" json:"category"`

这种关联实现:

  • 文章分类的快速查询
  • 分类文章的统计
  • 分类导航的构建
  • 文章的多级分类展示

状态说明

  • 0: 禁用
  • 1: 启用
  • 2: 待审核

该分类模型为博客系统提供了灵活的文章分类管理功能,支持多级分类结构和基本的分类属性管理。


http://www.kler.cn/a/521529.html

相关文章:

  • 134.力扣刷题--加油站--滑动窗口
  • leetcode——对称二叉树(java)
  • 记录一次Sqoop从MySQL导入数据到Hive问题的排查经过
  • 网站快速收录:利用新闻源的优势
  • Golang笔记——常用库context和runtime
  • 安装zsh并美化
  • C++进阶课程第2期——排列与组合1
  • 数据分析常用的AI工具
  • Java基础知识总结(二十二)--List接口
  • 重回C语言之老兵重装上阵(十六)C语言可变参数
  • 低代码可视化-转盘小游戏可视化-代码生成器
  • OSPF协议考点
  • 【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)
  • Python 如何进行文本匹配:difflib| python 小知识
  • [蓝桥杯 2014 省 AB] 蚂蚁感冒
  • 独立开发者产品日刊:让ChatGPT自动执行任务、AI电子阅读器、音频转视频、Android 智能助手、对话生成表单、SEO内容优化
  • 使用python实现mongodb的操作
  • C语言,无法正常释放char*的空间
  • 03-画P封装(制作2D+添加3D)
  • 《剪映5.9官方安装包》免费自动生成字幕
  • PHP根据IP地址获取地理位置城市和经纬度信息
  • flink StreamGraph解析
  • 为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?
  • Hive:内部表和外部表,内外转换
  • 企业微信开发009_使用WxJava企业微信开发框架_封装第三方应用企业微信开发002_并且实现多企业授权访问---企业微信开发011
  • C#实现SQL Server数据血缘关系生成程序