我是gorm的新手,所以如果我誤解了一點,請指出。我正在使用MySQL編寫小型應用程序,因此決定將gorm用作ORM。源代碼和輸出如下。package mainimport ( "fmt" "log" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql")type Group struct { gorm.Model Name string `gorm:"not null;unique"`}func openDB() *gorm.DB { user := "ipmonitor" password := "testpassword" database := "ipmonitor" mysqlURL := "%s:%s@/%s?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open("mysql", fmt.Sprintf(mysqlURL, user, password, database)) if err != nil { log.Fatalln(err) } return db}func initDB(db *gorm.DB) { db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4") db.AutoMigrate(&Group{}) result := db.Create(&Group{Name: "foo"}) if result.Error != nil { log.Fatalln(result.Error) } result = db.Create(&Group{Name: "bar"}) if result.Error != nil { log.Fatalln(result.Error) } result = db.Create(&Group{Name: "baz"}) if result.Error != nil { log.Fatalln(result.Error) }}func main() { db := openDB() db.LogMode(true) initDB(db) records := db.Find(&Group{}) if records.Error != nil { log.Fatalln(records.Error) } log.Printf("%d rows found.", records.RowsAffected) rows, err := records.Rows() if err != nil { log.Fatalln(err) } defer rows.Close() for rows.Next() { var group Group err := db.ScanRows(rows, &group) if err != nil { log.Fatalln(err) } log.Printf("%+v\n", group) } if rows.Err() != nil { log.Fatalln(rows.Err()) }}我希望該*DB.Find().Rows()方法返回多行,但似乎只返回最后一行。根據gorm debug輸出,似乎在執行SELECT語句時添加了未指定的條件。谷歌搜索后,我無法找出問題的原因。為什么我的代碼不起作用?
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
您可以嘗試這種替代方法:
var records []Group
db.Find(&records)
所有數據都可以在中作為數組使用records。
如果您需要處理錯誤:
if err := db.Find(&records).Error; err != nil {
log.Fatalln(err)
}
log.Printf("%d rows found.", len(records))
- 1 回答
- 0 關注
- 380 瀏覽
添加回答
舉報
0/150
提交
取消