亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 gorm golang 在多個表中進行動態列搜索

使用 gorm golang 在多個表中進行動態列搜索

Go
慕雪6442864 2023-06-12 15:20:35
我的場景是我有一個帶有搜索選項的網格,用戶可以在其中選擇列并進行搜索,網格數據來自各種表。我附上了網格示例屏幕。所以我正在嘗試為搜索創建一個動態查詢,但問題是我只能在主表 (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此技術使用關鍵字,但如果不能,相應地調整您的查詢應該很容易。


查看完整回答
反對 回復 2023-06-12
  • 1 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號