我目前有一个俱乐部和标签表,我想获得所有的俱乐部,至少有一个这些给定的标签。
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,并尝试遵循以下示例
任何帮助都很感激!谢谢:)
2条答案
按热度按时间mzillmmw1#
基于您的错误:
错误:club_tag.deleted_at列不存在(SQLSTATE 42703)
错误:表“club_tag”缺少FROM子句条目(SQLSTATE 42P01)
你的第一个错误说你的
club_tag
没有deleted_at
,我认为你的结构体有gorm.Model
数据。GORM定义了一个gorm.model结构,该结构包含字段
ID
、CreatedAt
、UpdatedAt
、DeletedAt
当你创建查询的结构,其中有gorm.Model.gorm在默认情况下创建
deleated_at = null
的查询。所以我认为你应该删除gorm.Model和创建你想要的字段。你的第二个错误说你的查询没有任何表连接。所以我认为你必须检查你的表名。
lyr7nygr2#
很抱歉很晚才回复,但这将有助于任何人充分寻找类似的问题。
@ttrasn我猜是正确的。
我想你用了gorm.模型到你的结构中。
GORM库,它嵌入了一些与数据库模型一起使用的公共字段。这些字段是:
通过将gorm.Model嵌入到自己的Go语言结构体中,就可以访问这些字段,而不必自己定义它们,从而使数据库的使用变得更加容易。
如果您使用
然后gorm将在引用表中搜索字段deleted_at,这将创建您要查找的原因。
但是,如果您的对象不希望搜索这些字段,您可以通过以下方式忽略这些字段
或者您可以使用db.Raw()sql Ex:
另外注意:如果你试图访问一个不包含上述字段的DB视图,那么只需从视图结构中删除gorm.Model。