在使用Joins查询时,使用了Scan自定义接口获取数据
type UserRouteResult struct {
Id uint `json:"id"`
Cover string `json:"cover"`
Name string `json:"name"`
Step uint `json:"step"`
CreatedAt time.Time
UserId uint `json:"userId"`
}
但在结果中UserId是0,也没有报错,把sql打印出来使用mysql工具查询也正常,排查了好久,最后在gorm的“惯例”那页看到
列名是字段名的蛇形小写形式
type User struct {
ID uint // 字段名是 `id`
Name string // 字段名是 `name`
Birthday time.Time // 字段名是 `birthday`
CreatedAt time.Time // 字段名是 `created_at`
}
而数据库在设计的时候存的字段是userId,所以需要使用Select查询并使用as关键字转为蛇形小写形式
query.Select("mod_route.id, mod_route.name, mod_route.created_at, mod_user_route.userId as user_id").Joins("left join mod_user_route on mod_route.id = mod_user_route.routeId").Order("mod_route.created_at").Scan(&list).Error