这是我查询数据库列表得逻辑代码
func (l *ProductTypeListLogic) ProductTypeList(req *types.ProductTypeListRequest) (resp *types.ProductTypeListResponse, err error) {
list := []model.ProductType{}
total := int64(0)
sqlQuery := l.svcCtx.DB.Model(&model.ProductType{})
totalQuery := l.svcCtx.DB.Model(&model.ProductType{})
if req.PageSize > 0 && req.PageNum > 0 {
sqlQuery.Offset((req.PageNum - 1) * req.PageSize).Limit(req.PageSize)
}
if req.ProductTypeName != nil {
sqlQuery.Where("product_type_name LIKE ?", "%"+*req.ProductTypeName+"%")
totalQuery.Where("product_type_name LIKE ?", "%"+*req.ProductTypeName+"%")
}
err = sqlQuery.Find(&list).Error
err = totalQuery.Find(&total).Error
if err != nil {
return nil, err
}
resList := []types.ProductTypeDetailResponse{}
for _, v := range list {
resList = append(resList, types.ProductTypeDetailResponse{
Id: v.Id,
ProductTypeName: v.ProductTypeName,
ProductTypeCode: v.ProductTypeCode,
ProductTypeDesc: v.ProductTypeDesc,
SortCode: v.SortCode,
})
}
resp = &types.ProductTypeListResponse{
List: resList,
Total: total,
}
return
}
数据库表定义:
type ProductType struct {
Id string `json:"id" gorm:"primaryKey;type:varchar(36);column:id"`
ProductTypeName string `json:"product_type_name" gorm:"type:varchar(255);column:product_type_name;uniqueIndex;not null"`
ProductTypeCode string `json:"product_type_code" gorm:"type:varchar(255);column:product_type_code"`
ProductTypeDesc string `json:"product_type_desc" gorm:"type:text;column:product_type_desc"`
SortCode int64 `json:"sort_code" gorm:"type:bigint;column:sort_code;uniqueIndex;not null"`
CreatedAt time.Time
}
查询表中数据列表时报错:
错误来源:totalQuery.Find(&total)
试图将查询结果直接扫描到一个 int64
变量中,但这是不正确的,因为 Find
方法期望的是一个结构体切片或指针。
解决方法:将Find改成Count,解决!
err = totalQuery.Find(&total).Error
err = totalQuery.Count(&total).Error