Go Gorm有一个子表总是空的

Go Gorm有一个子表总是空的,go,go-gorm,has-one,Go,Go Gorm,Has One,我尝试用Golang开发Restfull API, 但我和戈姆之间有一个问题 我是刚来golang和go gorm的新手,我遵循官方网站上的struct示例 这里是代码片段: type Server struct { DB *gorm.DB Router *mux.Router } type CreditCard struct { gorm.Model Number string UserID uint } type User struct {

我尝试用Golang开发Restfull API, 但我和戈姆之间有一个问题

我是刚来golang和go gorm的新手,我遵循官方网站上的struct示例

这里是代码片段:

type Server struct {
    DB *gorm.DB
    Router *mux.Router
}

type CreditCard struct {
    gorm.Model
    Number   string
    UserID   uint
}

type User struct {
    gorm.Model
    Name    string
    Card    CreditCard
}

func (u *User) FindUsersWithRelation(db *gorm.DB) (*[]User, error) {
    var err error
    users := []User{}
    err = db.Debug().Model(&User{}).Limit(100).Find(&users).Error
    if err != nil {
        return &[]User{}, err
    }
    return &users, err
}

/============
func (s *Server) GetUsersWithRelation(w http.ResponseWriter, r *http.Request) {
    user := models.User{}

    users, err := user.FindUsersWithRelation(s.DB)
    if err != nil {
        responses.ERROR(w, http.StatusInternalServerError, err)
        return
    }
    responses.JSON(w, http.StatusOK, users)
}

//============
func (s *Server) InitializeRoutes() {
    s.Router.HandleFunc("/test", middlewares.SetMiddlewareJSON(s.GetUsersWithRelation)).Methods("GET")
}
+----+---------------------+---------------------+------------+------+
| id | created_at          | updated_at          | deleted_at | name |
+----+---------------------+---------------------+------------+------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | John |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | Ann  |
+----+---------------------+---------------------+------------+------+
+----+---------------------+---------------------+------------+------------------+---------+
| id | created_at          | updated_at          | deleted_at | number           | user_id |
+----+---------------------+---------------------+------------+------------------+---------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | 123-456-90123    |       1 |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | 098-765-432-1010 |       2 |
+----+---------------------+---------------------+------------+------------------+---------+
用户:

type Server struct {
    DB *gorm.DB
    Router *mux.Router
}

type CreditCard struct {
    gorm.Model
    Number   string
    UserID   uint
}

type User struct {
    gorm.Model
    Name    string
    Card    CreditCard
}

func (u *User) FindUsersWithRelation(db *gorm.DB) (*[]User, error) {
    var err error
    users := []User{}
    err = db.Debug().Model(&User{}).Limit(100).Find(&users).Error
    if err != nil {
        return &[]User{}, err
    }
    return &users, err
}

/============
func (s *Server) GetUsersWithRelation(w http.ResponseWriter, r *http.Request) {
    user := models.User{}

    users, err := user.FindUsersWithRelation(s.DB)
    if err != nil {
        responses.ERROR(w, http.StatusInternalServerError, err)
        return
    }
    responses.JSON(w, http.StatusOK, users)
}

//============
func (s *Server) InitializeRoutes() {
    s.Router.HandleFunc("/test", middlewares.SetMiddlewareJSON(s.GetUsersWithRelation)).Methods("GET")
}
+----+---------------------+---------------------+------------+------+
| id | created_at          | updated_at          | deleted_at | name |
+----+---------------------+---------------------+------------+------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | John |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | Ann  |
+----+---------------------+---------------------+------------+------+
+----+---------------------+---------------------+------------+------------------+---------+
| id | created_at          | updated_at          | deleted_at | number           | user_id |
+----+---------------------+---------------------+------------+------------------+---------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | 123-456-90123    |       1 |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | 098-765-432-1010 |       2 |
+----+---------------------+---------------------+------------+------------------+---------+
信用卡:

type Server struct {
    DB *gorm.DB
    Router *mux.Router
}

type CreditCard struct {
    gorm.Model
    Number   string
    UserID   uint
}

type User struct {
    gorm.Model
    Name    string
    Card    CreditCard
}

func (u *User) FindUsersWithRelation(db *gorm.DB) (*[]User, error) {
    var err error
    users := []User{}
    err = db.Debug().Model(&User{}).Limit(100).Find(&users).Error
    if err != nil {
        return &[]User{}, err
    }
    return &users, err
}

/============
func (s *Server) GetUsersWithRelation(w http.ResponseWriter, r *http.Request) {
    user := models.User{}

    users, err := user.FindUsersWithRelation(s.DB)
    if err != nil {
        responses.ERROR(w, http.StatusInternalServerError, err)
        return
    }
    responses.JSON(w, http.StatusOK, users)
}

//============
func (s *Server) InitializeRoutes() {
    s.Router.HandleFunc("/test", middlewares.SetMiddlewareJSON(s.GetUsersWithRelation)).Methods("GET")
}
+----+---------------------+---------------------+------------+------+
| id | created_at          | updated_at          | deleted_at | name |
+----+---------------------+---------------------+------------+------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | John |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | Ann  |
+----+---------------------+---------------------+------------+------+
+----+---------------------+---------------------+------------+------------------+---------+
| id | created_at          | updated_at          | deleted_at | number           | user_id |
+----+---------------------+---------------------+------------+------------------+---------+
|  1 | 2020-01-22 11:51:42 | 2020-01-22 11:51:42 | NULL       | 123-456-90123    |       1 |
|  2 | 2020-01-22 11:51:43 | 2020-01-22 11:51:43 | NULL       | 098-765-432-1010 |       2 |
+----+---------------------+---------------------+------------+------------------+---------+
这是从邮递员处获取测试终点的结果:

[
    {
        "ID": 1,
        "CreatedAt": "2020-01-22T11:51:42+07:00",
        "UpdatedAt": "2020-01-22T11:51:42+07:00",
        "DeletedAt": null,
        "Name": "John",
        "Card": {
            "ID": 0,
            "CreatedAt": "0001-01-01T00:00:00Z",
            "UpdatedAt": "0001-01-01T00:00:00Z",
            "DeletedAt": null,
            "Number": "",
            "UserID": 0
        }
    },
    {
        "ID": 2,
        "CreatedAt": "2020-01-22T11:51:43+07:00",
        "UpdatedAt": "2020-01-22T11:51:43+07:00",
        "DeletedAt": null,
        "Name": "Ann",
        "Card": {
            "ID": 0,
            "CreatedAt": "0001-01-01T00:00:00Z",
            "UpdatedAt": "0001-01-01T00:00:00Z",
            "DeletedAt": null,
            "Number": "",
            "UserID": 0
        }
    }
]
为什么每个用户的卡总是空的?

如果你想获取相关的东西,你需要使用:

db.Model(&User{}).Limit(100).Preload("CreditCards").Find(&users)

它返回为空,因为您没有提取数据,而Go将默认使用结构的属性。

您保存了我的一天