【问题标题】:"Has many" relation giving empty result“有很多”关系给出空结果
【发布时间】:2016-02-24 01:52:28
【问题描述】:

我正在尝试定义与 gorm ORM 的一对多关系。我一遍又一遍地阅读了所有文档。找不到办法。

func GetUser1(c *gin.Context) {
    var user models.User
    var activities models.UserActivity
    query := DB.Debug().Find(&user, 1).Model(&user).Related(&activities).Error
    if query != nil {
        panic(query)
    }
    c.JSON(200, &user)
}

我的模特是..

type User struct {
    Id       int64
    Username string
    Password string `json:"-"`
    Email    string `json:",omitempty"`
    UserActivities []UserActivity
}
type UserActivity struct {
    Id         int64
    UserId     int64 `json:"-"`
    ActorId    int64
    CreatedAt  time.Time
}

调试结果是

[2015-11-21 22:21:54]  [3.17ms]  SELECT  * FROM `users`  WHERE (`id` = '1')
[2015-11-21 22:21:54]  [1.39ms]  SELECT  * FROM `user_activities`  WHERE (`user_id` = '1')

但我得到空结果

{
    "Id": 1,
    "Username": "test1",
    "Email": "test1@friesen.com",
    "UserActivities": null
}

所有的主键和索引都是正确的。我还尝试过将gorm:"primary_key"sql:"index" 放入UserActivities 到目前为止没有运气。 但是,如果我将UserActivities []UserActivity 替换为UserActivities UserActivity,那么我只会得到一行,这似乎是正确的,但为什么UserActivities []UserActivity 没有给出任何结果

【问题讨论】:

    标签: go one-to-many go-gorm


    【解决方案1】:

    使用 gorm 内置模型 gorm.Model 这样你就不会弄乱“ID”常量

    【讨论】:

      【解决方案2】:

      你的问题的解决方法很简单。

      而不是查询

      var user models.User
      var activities models.UserActivity
      query := DB.Debug().Find(&user, 1).Model(&user).Related(&activities).Error
      

      随便查询

      var user models.User
      query := DB.Debug().Find(&user, 1).Model(&user).Related(&user.UserActivities).Error
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-03
        • 2017-03-05
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 2015-08-05
        相关资源
        最近更新 更多