gorm join 多表重复字段as

作者: adm 分类: go 发布时间: 2023-04-12
产品模型
type ProductAttribute struct {
	Id         int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
	Name       string    `json:"name" gorm:"column:name"`              // 名称
	OrderBy    int       `json:"orderBy" gorm:"column:order_by"`       // 排序
	IndustryId int       `json:"industryId" gorm:"column:industry_id"` // 分类id
	Status     int       `json:"status"`                               // 状态
	CreatedAt  time.Time `json:"createdAt"`
	UpdatedAt  time.Time `json:"updatedAt"`
}

分类模型

type Cate struct {
	Id         int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
	Name       string    `json:"name" gorm:"column:name"`              // 分类名称
	OrderBy    int       `json:"orderBy" gorm:"column:order_by"`       // 排序
	Status     int       `json:"status"`                               // 状态
	CreatedAt  time.Time `json:"createdAt"`
	UpdatedAt  time.Time `json:"updatedAt"`
}

扫描到此结构体

type ProductAttribute struct {
	Id           int       `json:"id" `
	Name         string    `json:"name" `              // 名称
	OrderBy      int       `json:"orderBy"`           // 排序
	CateId       int       `json:"cateId" `           // 分类id
	CateName     string     `json:"cateName"`        // 分类名称
	Status       int       `json:"status"`            // 状态
	CreatedAt    time.Time `json:"createdAt"`
	UpdatedAt    time.Time `json:"updatedAt"`
}

查询

table := orm.Eloquent.Table(models.ProductAttribute{}.TableName() +" AS p").Select("p.*,i.name AS cate_name").Debug().Joins("left join "+models.Cate{}.TableName()+" AS i ON p.cate_id=i.id")
	if req.Name != "" {
		table = table.Where("p.name like ?","%"+req.Name+"%")
	}

	if err = table.Offset((pageIndex -1) * pageSize).Limit(pageSize).Order("p.order_by desc,p.created_at desc").Find(&attribute).Count(&count).Error; err != nil {
		log.Println(err.Error())

	}

注意:此出i.name AS cate_name 是带下划线的,不是驼峰,是映射返回值结构体,并且因为查找的时候struct字段中的大写会被转义成“_”,所以别名也要将大写转为“_”,这个折腾了好久。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!