Gorm 左加入 Scan()

我正在尝试联接到表和上,并获得类型的结果ClassBookingclasses.id = bookings.class_idDisplayBooking


type 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()


慕容708150
浏览 258回答 1
1回答

红糖糍粑

你可以用 做,字段中没有值,因为字段的默认值是 ,但是你要匹配的列是 ,这两者不匹配。Scanclass_nameDisplayBookinggorm tag nameclass_namename您可以添加列别名来解决此问题,将表达式更改为以下表达式:Scan()db.Debug().Model(&Booking{}).Select("bookings.id,&nbsp;bookings.user,&nbsp;bookings.members,&nbsp;bookings.class_id,&nbsp;classes.name&nbsp;as&nbsp;class_name").Joins("left&nbsp;join&nbsp;classes&nbsp;on&nbsp;bookings.class_id&nbsp;=&nbsp;classes.id").Scan(&bookings)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go