我是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 关注
- 327 浏览
添加回答
举报
0/150
提交
取消