package gmodel import ( "context" "errors" "gorm.io/gorm" ) type GetRecommendProductListReq struct { Ctx context.Context Page int Limit int } func (r *FsProductRecommendModel) GetRecommendProductList(req GetRecommendProductListReq) (resp []FsProduct, total int64, err error) { db := r.db.WithContext(req.Ctx). Table("fs_product_recommend as r"). Joins("inner join fs_product as p on r.product_id = p.id"). Where("r.status = ? ", 1). Where("p.is_shelf = ? and p.is_del = ? and p.status = ?", 1, 0, 1) if err = db.Limit(1).Count(&total).Error; err != nil { return nil, 0, err } db = db.Select("p.*") offset := (req.Page - 1) * req.Limit err = db.Offset(offset).Limit(req.Limit).Find(&resp).Error return resp, total, err } func (r *FsProductRecommendModel) CreateOrUpdate(ctx context.Context, productId int64, data *FsProductRecommend) error { var info FsProductRecommend err := r.db.WithContext(ctx).Model(&FsProductRecommend{}).Where("`product_id` = ?", productId).Take(&info).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return err } if info.Id == 0 { return r.db.WithContext(ctx).Model(&FsProductRecommend{}).Create(data).Error } return r.db.WithContext(ctx).Model(&FsProductRecommend{}).Where("`product_id` = ?", productId).Updates(data).Error }