Sql gorm-golang在多表中的动态列搜索
我的场景是,我有一个带有搜索选项的网格,用户可以选择列并进行搜索,网格数据来自不同的表。我附上了一个网格的样本屏幕 因此,我试图创建一个用于搜索的动态查询,但问题是我只能在主表(schema.Robot)中搜索,而不能在预加载表中搜索。每当我试图从预加载表中搜索数据时,比如说从RobotModel表中搜索数据时,就会出现以下错误 pq:表“robot_models”的条款条目中缺少 这是我的密码Sql gorm-golang在多表中的动态列搜索,sql,go,go-gorm,Sql,Go,Go Gorm,我的场景是,我有一个带有搜索选项的网格,用户可以选择列并进行搜索,网格数据来自不同的表。我附上了一个网格的样本屏幕 因此,我试图创建一个用于搜索的动态查询,但问题是我只能在主表(schema.Robot)中搜索,而不能在预加载表中搜索。每当我试图从预加载表中搜索数据时,比如说从RobotModel表中搜索数据时,就会出现以下错误 pq:表“robot_models”的条款条目中缺少 这是我的密码 func (r *RobotsRepository) GetRobotsSummary(listP
func (r *RobotsRepository) GetRobotsSummary(listParams viewmodel.ListParams, companyID uint) ([]*schema.Robot, int, error) {
mrobots := []*schema.Robot{}
var count int
var order string
if 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 string
if 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).Error
r.Conn.Model(&schema.Robot{}).Where(searchQuery).Count(&count)
return mrobots, count, err
}
在searchQuery变量中,我存储动态查询。
我的问题是如何在数据中搜索预加载表列
下面是我试图使用gorm实现的sql查询
SELECT robots.id,robots.name,robot_models.name as
model_name,count(tasks.task_status) as task_on_hand,
robots.updated_at,users.user_name as updated_by
FROM rfm.robots as robots
left join rfm.tasks as tasks on tasks.robot_id = robots.id and
tasks.task_status in ('In-Progress','Pending')
left join rfm.robot_models as robot_models on robot_models.id =
robots.robot_model_id
left join rfm.users as users on users.id = robots.updated_by
WHERE robot_models.name::varchar like '%RNR%' and robots.deleted_at is null
GROUP BY robots.id,robot_models.name,users.user_name
ORDER BY task_on_hand DESC LIMIT 2 OFFSET 0
对不起,英语不好 即使您正在预加载,在对其他表上的列进行筛选和排序时,仍然需要显式使用联接。预加载用于急切地加载要映射到模型中的数据,而不是连接表 像这样的链条:
.Joins("LEFT JOIN rfm.robot_models AS robot_models ON robot_models.id = robots.robot_model_id")
我不确定是否可以使用此技术将用作
关键字,但如果不能,则应该很容易相应地调整查询