【GVA】gorm多对多关联使用Preload带出关联表中的数据

db.Limit(limit).Offset(offset).Preload("BusinessSystemList").Find(&projectManagements).Error

// GetProjectManagementInfoList 分页获取ProjectManagement记录
// Author [piexlmax](https://github.com/piexlmax)
func (projectManagementService *ProjectManagementService) GetProjectManagementInfoList(info autoCodeReq.ProjectManagementSearch) (err error, list interface{}, total int64) {
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)
	// 创建db
	db := global.GVA_DB.Model(&autocode.ProjectManagement{})
	var projectManagements []autocode.ProjectManagement
	// 如果有条件搜索 下方会自动创建搜索语句
	if info.ProjectName != "" {
		db = db.Where("`project_name` LIKE ?", "%"+info.ProjectName+"%")
	}
	if info.ProjectDesc != "" {
		db = db.Where("`project_desc` LIKE ?", "%"+info.ProjectDesc+"%")
	}
	if info.ProjectManager != 0 {
		db = db.Where("`project_manager` = ?", info.ProjectManager)
	}
	if info.CustomerName != "" {
		db = db.Where("`customer_name` LIKE ?", "%"+info.CustomerName+"%")
	}
	if info.ProjectStartDate != nil {
		db = db.Where("`project_start_date` = ?", info.ProjectStartDate)
	}
	if info.ProjectEndDate != nil {
		db = db.Where("`project_end_date` = ?", info.ProjectEndDate)
	}
	err = db.Count(&total).Error
	if err != nil {
		return
	}
	// err = db.Limit(limit).Offset(offset).Find(&projectManagements).Error
	// 带出businessSystemList
	err = db.Limit(limit).Offset(offset).Preload("BusinessSystemList").Find(&projectManagements).Error
	return err, projectManagements, total
}
网站开发技术。 | | | type ExaReport struct { global.GVA_MODEL TableNames string json:"tableNames" form:"tableNames" gorm:"comment:报表类型" // 报表类型 Plate string json:"plate" form:"plate" gorm:"comment:所属板块" // 所属板块 StartTime *time.Time json:"startTime" form:"startTime" gorm:"comment:数据最早时间" // 数据最早时间 EndTime *time.Time json:"endTime" form:"endTime" gorm:"comment:数据最晚时间" // 数据最晚时间 UpdateAt *time.Time json:"updateAt" form:"updateAt" gorm:"comment:数据更新时间" UpdateOpinion string json:"updateOpinion" form:"updateOpinion" gorm:"comment:更新详细意见" StateCode string json:"stateCode" form:"stateCode" gorm:"comment:解析状态" SysUserID uint json:"sysUserId" form:"sysUserId" gorm:"comment:管理ID" // 管理ID SysUserAuthorityID uint json:"sysUserAuthorityID" form:"sysUserAuthorityID" gorm:"comment:管理角色ID" // 管理角色ID SysUser system.SysUser json:"sysUser" form:"sysUser" gorm:"comment:管理详情" // 管理详情 } func (exa *ReportService) DeleteReport(e example.ExaReport) (err error) { // 删除对应的用户意见数据 var tableName string err = global.GVA_DB.Model(&example.ExaReport{}).Where("id = ?", e.ID).Pluck("table_names", &tableName).Error if err != nil { return err } err = global.GVA_DB.Where("data_source = ?", tableName).Delete(&example.ExaUserOpinion{}).Error if err != nil { return err } // 删除报表数据 err = global.GVA_DB.Delete(&e).Error if err != nil { return err } return nil } 先通过id查询table_names以及plate的值,然后判断plate=用户意见板块或者质量测试板块 当plate=用户意见板块时,在表&example.ExaUserOpinion{}内删除data_source = tableName的数据, 当plate=质量测试板块时,在表&example.ExaUserOpinion{}内删除data_source = tableName的数据请帮我修改代码
07-22
你想要修改的代码如下所示: ```go func (exa *ReportService) DeleteReport(e example.ExaReport) (err error) { // 通过ID查询table_names和plate的值 var tableName string var plate string err = global.GVA_DB.Model(&example.ExaReport{}).Select("table_names, plate").Where("id = ?", e.ID).Scan(&e).Error if err != nil { return err } // 判断plate=用户意见板块或者质量测试板块 if e.Plate == "用户意见板块" { // 当plate=用户意见板块时,在表&example.ExaUserOpinion{}内删除data_source = tableName的数据 err = global.GVA_DB.Where("data_source = ?", e.TableNames).Delete(&example.ExaUserOpinion{}).Error if err != nil { return err } } else if e.Plate == "质量测试板块" { // 当plate=质量测试板块时,在表&example.ExaUserOpinion{}内删除data_source = tableName的数据 err = global.GVA_DB.Where("data_source = ?", e.TableNames).Delete(&example.ExaUserOpinion{}).Error if err != nil { return err } } // 删除报表数据 err = global.GVA_DB.Delete(&e).Error if err != nil { return err } return nil } ``` 在代码中,我添加了查询语句来获取 `table_names` 和 `plate` 的值。然后,根据 `plate` 的值进行条件判断。如果 `plate` 等于 "用户意见板块",则在表 `example.ExaUserOpinion{}` 中删除 `data_source = tableName` 的数据。如果 `plate` 等于 "质量测试板块",也在表 `example.ExaUserOpinion{}` 中删除 `data_source = tableName` 的数据。最后,删除报表数据。 请注意,我假设了 "用户意见板块" 和 "质量测试板块" 是 `plate` 属性的可能取值。你可以根据实际情况修改这些值。另外,我还修正了查询语句中的错误,应该使用 `Scan` 方法将结果赋值给 `e` 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值