【问题标题】:Gorm Join table queryGorm Join 表查询
【发布时间】:2020-08-20 22:50:11
【问题描述】:

我目前有一个俱乐部和标签表,我想获得所有具有至少 1 个给定标签的俱乐部。

type Club struct {
    ID      uint
    Sets    []Tag `gorm:"many2many:club_tag;foreignKey:id;References:name"
}
type Tag struct {
    ID   uint
    Name string
}

我进行了这个查询,结果大部分时间都返回了具有该特定标签的俱乐部,但有时我会遇到这些问题。

var clubs []Club
var tags  []string

db.Joins("JOIN club_tag ON club_tag.club_id=club.id).
   Joins("JOIN tag ON club_tag.tag_name=tag.name").
   Where("tag.name IN ?", tags).
   Find(&clubs)

> ERROR: column club_tag.deleted_at does not exist (SQLSTATE 42703)
> Error: missing FROM-clause entry for table "club_tag" (SQLSTATE 42P01)

我是否在此查询中遗漏了某些内容以使其不会返回错误?

我目前正在使用 GORM v2 并尝试关注此example

感谢任何帮助!谢谢:)

【问题讨论】:

    标签: sql go go-gorm


    【解决方案1】:

    根据您的错误:

    错误:club_tag.deleted_at 列不存在 (SQLSTATE 42703)

    错误:缺少表“club_tag”的 FROM 子句条目 (SQLSTATE 42P01)

    你的第一个错误说你 club_tag 没有 deleted_at,我认为你的结构有 gorm.Model 数据。来自 gorm v2 的文档:

    GORM 定义了一个 gorm.Model 结构,其中包括字段IDCreatedAtUpdatedAtDeletedAt

    当您为具有 gorm.Model 的结构创建查询时。 gorm 在查询时默认创建deleated_at = null。所以我认为你应该删除 gorm.Model 并创建你想要的字段。

    您的第二个错误表明您的查询没有任何连接表。所以我认为你必须检查你的表名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多