我的场景是我有一个带有搜索选项的网格,用户可以在其中选择列并进行搜索,网格数据来自各种表。我附上了网格示例屏幕。所以我正在尝试为搜索创建一个动态查询,但问题是我只能在主表 (schema.Robot) 中搜索,而不能在 Preload 表中搜索。每当我尝试从 Preload 表中搜索数据时,让我们从 RobotModel 表中说那个时间低于错误pq:缺少表“robot_models”的 FROM 子句条目这是我的代码func (r *RobotsRepository) GetRobotsSummary(listParams viewmodel.ListParams, companyID uint) ([]*schema.Robot, int, error) {mrobots := []*schema.Robot{}var count intvar order stringif listParams.SortColumn == "" { listParams.SortColumn = "id" listParams.SortOrder = 1} else { listParams.SortColumn = util.Underscore(listParams.SortColumn)}if listParams.SortOrder == 0 { order = "ASC"} else { order = "DESC"}var searchQuery stringif listParams.SearchText != "" { switch listParams.SearchColumn { case "Robot": listParams.SearchColumn = "name" case "Model": listParams.SearchColumn = "robot_models.name" } searchQuery = listParams.SearchColumn +" LIKE '%"+ listParams.SearchText +"%' and Company_ID = " + fmt.Sprint(companyID)}else{ searchQuery = "Company_ID = " + fmt.Sprint(companyID)} orderBy := fmt.Sprintf("%s %s", listParams.SortColumn, order)err := r.Conn. Preload("RobotModel", func(db *gorm.DB) *gorm.DB { return db.Select("ID,Name") }). Preload("Task", func(db *gorm.DB) *gorm.DB { return db.Where("Task_Status in ('In-Progress','Pending')").Select("ID, Task_Status") }). Preload("CreatedUser", func(db *gorm.DB) *gorm.DB { return db.Select("ID,Display_Name") }). Preload("UpdatedUser", func(db *gorm.DB) *gorm.DB { return db.Select("ID,Display_Name") }). Where(searchQuery). Order(orderBy). Offset(listParams.PageSize * (listParams.PageNo - 1)). Limit(listParams.PageSize). Find(&mrobots).Errorr.Conn.Model(&schema.Robot{}).Where(searchQuery).Count(&count)return mrobots, count, err }在 searchQuery 变量中,我存储了我的动态查询。我的问题是如何搜索预加载表列的数据
1 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
即使您正在预加载,您仍然需要在对其他表的列进行过滤和排序时显式使用连接。预加载用于预先加载数据以映射到您的模型中,而不是连接表。
链接这样的东西:
.Joins("LEFT JOIN rfm.robot_models AS robot_models ON robot_models.id = robots.robot_model_id")
我不确定您是否可以使用AS
此技术使用关键字,但如果不能,相应地调整您的查询应该很容易。
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报
0/150
提交
取消