duanpan3166 2016-01-07 23:42
浏览 184

gorm多对多选择给出无效的关联[]错误

This is my db schema:

users :

id uuid PRIMARY KEY ,   title character
"1234"                  "ABCD"

languages :

id uuid PRIMARY KEY ,   name character
"1122"                  "eng"
"1133"                  "man"

user_languages :

user_id uuid,   language_id uuid
"1234"          "1122"
"1234"          "1133"

This is my code:

type User struct {
   Id           uuid.UUID  `json:"id" gorm:"primary_key"`
   Title        string     `json:"title"`
   Languages    []Language `json:"languages" gorm:"many2many:user_languages;"`
}

type Language struct {
   ID   uuid.UUID `json:"id" gorm:"primary_key"`
   Name string    `json:"name"`
}

func GetUser(id string) User {
   user := User{}
   languages := Language{}

   db.Where("id = ?", id).Find(&user) 
   // SELECT * FROM users WHERE 'id' = id;

   db.Model(&user).Related(&languages) 
   // SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111

   return user
}

I am expecting this result:

{
   "id": "1234",
   "title": "ABCD",
   "languages" : [{ 
               "id" : "1122",
               "name" : "eng"
           },{ 
               "id" : "1122",
               "name" : "eng"
           }]
}

But I am getting invalid association [] on console, adding a gorm logger did not provide more information.

Even if I can only get a "languages" object like an array of languages names, this is also fine:

"languages" : ["eng", "man"]
  • 写回答

2条回答 默认 最新

  • doukanmang3687 2016-01-08 22:55
    关注

    I think you need to use Association. You can also get the matching user more succinctly using db.First(&user, id).

    func GetUser(id string) User {
        var user User
    
        db.First(&user, id)
    
        db.Model(&user).Association("Languages").Find(&user.Languages) 
    
        return user
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀