【问题标题】:One-to-many relation need to define a valid foreign key error一对多关系需要定义一个有效的外键错误
【发布时间】:2021-02-06 15:17:58
【问题描述】:

我想制作一个 web 应用程序,并且我有一个简单的数据模型,具有一对多的关系。我尝试坚持使用 gorm 的文档,据我了解,这应该可行:

package dbModels

import "gorm.io/gorm"

type Post struct {
    gorm.Model
    Text string
    Likes int
    Comments []Comment 
}

type Comment struct {
    gorm.Model
    Text string
    Likes int
    PostID uint
}

我正在像这样迁移这些模型:

db.AutoMigrate(&dbModels.Post{}, &dbModels.Comment{})

然后我想把这个对象放在post中:

func (r *mutationResolver) CreatePost(ctx context.Context, input model.PostInput) (*model.Post, error) {
    var items []*model.Comment
    post := model.Post{
        Text:     input.Text,
        Likes:    0,
        Comments: items,
    }
    r.DB.Create(&post)
    return &post, nil
}

但是我得到以下错误:

2021/01/31 11:23:01 /home/felix/Projekte/GoReact/server/graph/schema.resolvers.go:21 invalid field found for struct github.com/blamefelix/TwitterClone/graph/model.Post's field Comments, need to define a valid foreign key for relations or it need to implement the Valuer/Scanner interface

我真的不明白我做错了什么。从 gorm 文档中,我认为如果我这样说,关系会由 gorm 管理吗?我的怀疑是,我输入了错误的数据?

【问题讨论】:

  • 我抓取了您的模型定义并对其进行了测试,它们工作得很好。在这个 CreatePost 中,您没有检查 Create 调用中的错误,那么您怎么知道这是导致错误消息的代码点?还要仔细检查一下,我想知道为什么您的 CreatePost 代码将 []*model.Comment 分配给 Comments 字段,因为它是在模块 dbModels 中定义的,并且是结构的切片,而不是指向结构的指针切片。
  • 是的,所以基本上我想为 orm 和 gql 使用不同的模型。我的想法是我可能希望在后端状态中有一些不需要在数据库中的东西。这就是我分配model.Comment的原因。我已经设法通过仅将我的 graphql 模型用作 orm 模型来解决此错误。所以问题一定是我把错误的数据放入数据库。

标签: go go-gorm


【解决方案1】:

所以我设法通过对 graphql 和 gorm 使用相同的模型来修复它。问题一定是我在db create函数中输入了错误的数据

【讨论】:

  • 您能对此有所了解吗?我面临同样的问题,但我的是一个简单的 CRUD 应用程序
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2011-07-29
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2012-09-08
相关资源
最近更新 更多