在go语言中gin + gorm多表关联实现一个店铺商品搜索功能示例
Go  /  管理员 发布于 4个月前   239
跟上一篇一样为了学习快速了解及跑通业务流程,快速开发实现功能。
有些拆分就不搞了,学习gorm多表关联实现列表接口
环境啥的就不介绍了,跟之前一样
go 1.18 + gin
接口测试apifox
进入步骤:
加路由
g.POST("getXfSearchSpu", v1.GetXfSearchSpu)
添加分页传参
// 分页列表
type GetListParam struct {
SortInfo
PageInfo
Type uint `json:"type"`
StoreId string `json:"storeId"`
UserId string `json:"userId"`
IsHidden *uint8 `json:"isHidden"`
Status *uint16 `json:"status"`
Search string `json:"search"`
CategoryId string `json:"categoryId"`
ColorId uint `json:"colorId"`
}
接口控制器
func GetXfSearchSpu(c *gin.Context) {
param := req.GetListParam{}
err := c.ShouldBindJSON(¶m)
if err != nil {
resp.ERRWithMsg(c, resp.SPU_PARAM_ERR, err.Error())
return
}
fmt.Println("param:", param)
s := service.NewSpuService()
list, count, err := s.GetListV3(¶m)
if err != nil {
resp.ERRWithMsg(c, resp.SPU_FIND_ERR, err.Error())
return
}
resp.OkWithData(resp.PageResult{Rows: list, Count: count}, c)
}
server
// 202405
func (s *SpuService) GetListV3(p *req.GetListParam) (list []*model.Spu, count int64, err error) {
p.Search = quote(p.Search)
list = make([]*model.Spu, 0)
limit, offset := getPageInfo(&p.PageInfo)
var cond string
//新增详情页搜索 搜索关键词及店铺id
if p.StoreId != "" && p.Search != "" {
cond = fmt.Sprintf("spus.store_id = '%s' and spus.spu_name like '%s'", p.StoreId, "%"+p.Search+"%")
} else {
cond = fmt.Sprintf("spus.store_id = '%s'", p.StoreId)
}
//颜色
if p.ColorId != 0 {
cond = fmt.Sprintf("sss.color_id = %d", p.ColorId)
}
if p.IsHidden != nil {
if cond != "" {
cond = fmt.Sprintf("%s and hidden = %d", cond, *p.IsHidden)
} else {
cond = fmt.Sprintf("hidden = %d", *p.IsHidden)
}
}
//字段
var SpuAlls = []string{"spus.id","spus.created_at", "spus.updated_at","spus.hidden"}
err = s.DB.Model(model.Spu{}).Joins("INNER JOIN skus ON spus.id = skus.spu_id").Joins("INNER JOIN spu_spec_skus AS sss ON spus.id = sss.spu_id ").Where(cond).Count(&count).Error
if err != nil || count == 0 {
return
}
err = s.DB.Order("spus.created_at desc").Limit(limit).Offset(offset).Select(SpuAlls).Joins("INNER JOIN skus ON spus.id = skus.spu_id").Joins("INNER JOIN spu_spec_skus AS sss ON spus.id = sss.spu_id ").Where(cond).Find(&list).Error
if err != nil {
return
}
err = getSpuListProp(list)
return
}
// 获取列表下的数据处理
func getSpuListProp(list []*model.Spu) (err error) {
categoryService := NewCategoryService()
specService := NewSpecService()
for i := range list {
list[i].ToObj()
// 获取分类
var categoryList []model.Category
var specParam *model.SpecParam
list[i].ToCategoryIdList()
categoryList, err = categoryService.GetJustListByIdList(list[i].CategoryIdList)
if err != nil {
return
}
list[i].CategoryList = categoryList
// 获取规格
specParam, err = specService.GetUseOfListBySpuId(list[i].ID)
if err != nil {
return
}
list[i].SpecParam = specParam
// 获取翻译
GetTranslationListBySpu(list[i])
}
return
}
效果
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号