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标签 | 描述 |
---|---|---|---|---|
Id | uint | json:“id” | orm:“id,primary” | 文章唯一标识符 |
Title | string | json:“title” | orm:“title” | 文章标题 |
Content | string | json:“content” | orm:“content” | 文章主要内容 |
Summary | string | json:“summary” | orm:“summary” | 文章简短摘要 |
CategoryId | int | json:“categoryId” | orm:“category_id” | 文章分类ID |
Tags | string | json:“tags” | orm:“tags” | 文章标签(逗号分隔) |
Cover | string | json:“cover” | orm:“cover” | 文章封面图片URL |
ViewCount | int | json:“viewCount” | orm:“view_count” | 文章浏览次数 |
Status | int | json:“status” | orm:“status” | 文章状态 |
CreatedAt | *gtime.Time | json:“createdAt” | orm:“created_at” | 文章创建时间戳 |
UpdatedAt | *gtime.Time | json:“updatedAt” | orm:“updated_at” | 最后更新时间戳 |
IsTop | int | json:“isTop” | orm:“is_top” | 是否置顶文章 |
Author | string | json:“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"` // 更新时间
}
分类字段说明
字段名 | 类型 | 描述 |
---|---|---|
Id | uint | 分类唯一标识符 |
Name | string | 分类名称 |
Type | string | 分类类型 |
ParentId | uint | 父分类ID,用于构建分类层级 |
Sort | int | 排序权重 |
Status | string | 分类状态 |
Alias | string | 分类别名,用于URL优化 |
CreatedAt | *gtime.Time | 创建时间 |
UpdatedAt | *gtime.Time | 更新时间 |
分类特性
-
多级分类
- 通过
ParentId
支持无限级分类 - 可以构建复杂的分类层级结构
- 通过
-
URL优化
- 支持别名设置,优化URL结构
- 更友好的SEO支持
-
状态管理
- 可设置分类状态
- 支持分类的启用/禁用管理
查询示例
// 获取分类及其子分类
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
: 待审核
该分类模型为博客系统提供了灵活的文章分类管理功能,支持多级分类结构和基本的分类属性管理。