我有一個場景,我需要在表中插入一些數(shù)據(jù)數(shù)組,在這種情況下,如果名稱和版本的組合已經(jīng)存在(復(fù)合唯一約束),我需要獲取這些 ID,否則獲取插入的 ID,如果兩種情況exist get inserted 和 existing ids我試過的模型和代碼如下:模型依賴type Dependency struct { gorm.Model ID string `gorm:"primaryKey; not null"` Name string `gorm:"not null; UniqueIndex:idx_name_version"` Version string `gorm:"not null; UniqueIndex:idx_name_version"`}使用 gorm 查詢代碼以插入依賴項var saveDependencyData []models.Dependency// Dependecies are read form api input // [// {// "name": "node",// "version": "16.0.0"// },// {// "name": "node",// "version": "18.0.0"// }// ]for _, dep := range Dependecies { saveDependencyData = append(saveDependencyData, models.Dependency{ ID: nanoid.New(), Name: dep.Name, Version: dep.Version, })}res := db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "name"}, {Name: "version"}}, DoUpdates: clause.AssignmentColumns([]string{"name"}), }).Create(saveDependencyData)gorm查詢輸出INSERT INTO "dependencies" ("id","created_at","updated_at","deleted_at","name","version") VALUES ('QanL-nfNFrOGdxG2iXdoQ','2022-10-06 19:21:13.079','2022-10-06 19:21:13.079',NULL,'react','16.0.0'),('Yw1YyQ-aBqrQtwZ72GNtB','2022-10-06 19:21:13.079','2022-10-06 19:21:13.079',NULL,'react','18.0.0') ON CONFLICT ("name","version") DO UPDATE SET "name"="excluded"."name" RETURNING "id"此查詢返回我需要的 ID 列表,但找不到檢索它的方法。使用 Scan() 獲取該表中的所有數(shù)據(jù)。您可以提供一種從上述 GORM db.Clauses() 中檢索返回 ID 的方法,或者使用任何其他優(yōu)化方法來使用更新插入查詢獲取那些(插入的和現(xiàn)有的)ID。
1 回答

MM們
TA貢獻1886條經(jīng)驗 獲得超2個贊
如評論中所示:GORM 的幾個函數(shù)需要一個指針作為參數(shù),并將用信息更新變量。
顯然,所有主要目的是檢索信息的函數(shù)都是這種情況(First
, Find
, ..., cf. https://gorm.io/docs/query.html)。
但對于修改數(shù)據(jù)的函數(shù)也是如此
Create
(https://gorm.io/docs/create.html),Update
( https://gorm.io/docs/update.html#Returning-Data-From-Modified-Rows ) 或者Delete
(https://gorm.io/docs/delete.html#Returning-Data-From-Deleted-Rows)
因此,這種情況下的解決方案是通過Create(&saveDependencyData)
而不是Create(saveDependencyData)
.
與數(shù)據(jù)庫對應(yīng)的最新信息將在saveDependencyData
調(diào)用后可用。
- 1 回答
- 0 關(guān)注
- 200 瀏覽
添加回答
舉報
0/150
提交
取消