首页 > 解决方案 > GORM如何获取相关数据?

问题描述

我想从其他表中获取相关数据

我有以下模型结构

type Community struct {
    ID       string            `json:"id" gorm:"primaryKey"`
    Name     string            `json:"name"`
    Category CommunityCategory `json:"category" gorm:"foreignKey:ID"`
}
type CommunityCategory struct {
    ID   uint32 `json:"id" gorm:"primaryKey"`
    Name string `json:"name"`
}

我获取数据的代码是这样的

community := Community{ID: 1}
database.Debug().Joins("CommunityCategory").First(&community)

有了这些,我得到以下错误ERROR: invalid reference to FROM-clause entry for table \"communities\" (SQLSTATE 42P01)

并且查看GORM的调试日志,查询是这样的

SELECT "communities"."id","communities"."name","communities"."introduction","communities"."address","communities"."postal_code","communities"."country","communities"."address1","communities"."address2","communities"."prefecture","communities"."city","communities"."lat","communities"."lng","communities"."phone","communities"."email","communities"."external_link_1","communities"."external_link_2","communities"."image_url","communities"."access","communities"."description","communities"."contact_name","communities"."contact_phone","communities"."contact_email","communities"."is_enabled","communities"."created_at","communities"."updated_at" FROM "communities" CommunityCategory WHERE "communities"."id" = '25b1eadf-1004-40b7-b9a2-325a83bcb938' ORDER BY "communities"."id" LIMIT 1

我做错了吗?哈哈

标签: gogo-gorm

解决方案


通过如下定义我的结构来解决这个问题。我CategoryIDCommunitystruct 中添加了一个新字段并将外键更改为这个新字段

type Community struct {
    ID         string            `json:"id" gorm:"primaryKey"`
    Name       string            `json:"name"`
    CategoryID uint32
    Category   CommunityCategory `json:"category" gorm:"foreignKey:CategoryID"`
}

type CommunityCategory struct {
    ID   uint32 `json:"id" gorm:"primaryKey"`
    Name string `json:"name"`
}

然后在查询时,您可以像这样执行连接:

community := Community{ID: 1}
database.Model(&Community{}).Joins("Category").First(&community)

推荐阅读