为了账号安全,请及时绑定邮箱和手机立即绑定

Gorm 左加入 Scan()

Gorm 左加入 Scan()

Go
慕容708150 2022-08-24 15:47:56
我正在尝试联接到表和上,并获得类型的结果ClassBookingclasses.id = bookings.class_idDisplayBookingtype Class struct {    Id   int    `json:"id"`    Name string `json:"name"`}type Booking struct {    Id      int    `json:"id"`    User    string `json:"user"`    Members int    `json:"members"`    ClassId int    `json:classid`    //Class   Class  `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`}type DisplayBooking struct {    Id        int    `json:"id"`    User      string `json:"user"`    Members   int    `json:"members"`    ClassId   int    `json:classid`    ClassName string `json:"classname"`}为此,我尝试了gorm和方法Scan()Rows()func returnAllBookings(w http.ResponseWriter, r *http.Request) {    bookings := []DisplayBooking{}    db.Model(&Booking{}).Select("bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name").Joins("left join classes on bookings.class_id = classes.id").Scan(&bookings)    fmt.Println("Endpoint Hit: returnAllBookings")    rows, err := db.Table("bookings").Select("bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name").Joins("left join classes on bookings.class_id = classes.id").Rows()    if err != nil {        return    }    for rows.Next() {        log.Println(rows)    }    json.NewEncoder(w).Encode(bookings)}Scan()在class_name字段中返回空值,虽然似乎可以完成工作,但输出格式不是JSON编码输出Rows()Scan()[{"id":1,"user":"test1","members":1,"ClassId":2,"classname":""},{"id":2,"user":"test2","members":2,"ClassId":1,"classname":""}]Rows()输出(控制台) - 粗体值是正确的,但有很多不必要的信息my-go-app_1  | 2021/04/09 07:42:09 &{0xc00021e1b0 0x6dcfa0 0xc00026adc0 <nil> <nil> {{0 0} 0 0 0 0} false <nil> **[1 test1 1 2 business]**}my-go-app_1  | 2021/04/09 07:42:09 &{0xc00021e1b0 0x6dcfa0 0xc00026adc0 <nil> <nil> {{0 0} 0 0 0 0} false <nil> **[2 test2 2 1 first]**}有没有办法让代码与函数一起工作?Scan()
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

你可以用 做,字段中没有值,因为字段的默认值是 ,但是你要匹配的列是 ,这两者不匹配。Scanclass_nameDisplayBookinggorm tag nameclass_namename

您可以添加列别名来解决此问题,将表达式更改为以下表达式:Scan()

db.Debug().Model(&Booking{}).Select("bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name as class_name").Joins("left join classes on bookings.class_id = classes.id").Scan(&bookings)


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号