0

我正在努力理解如何通过灯塔建立关系。假设我有一个Post模型。在我的,我有:belongsToUserschema.graphql

type Mutation {
  createPost(input: CreatePostInput! @spread): Post! @create
}

input CreatePostInput! {
  text: String!
  user: BelongsToUser!
}

input BelongsToUser {
  connect: ID!
}

我在数据库中的 Post 对象有一个外键列user_id

当我运行查询时:

mutation {
  createPost(input: {
    text: "Hello World",
    user: {
      connect: 1
    }
  }){
    id
  }
}

我收到一个错误:Field 'user_id' doesn't have a default value

我觉得我做错了什么,这个突变没有更新关系的正确列,有人可以指出我可能做错了什么吗?(如果我在数据库中使用默认值使列可以为空,它会被插入,但关系当然是不正确的。我还可以调整 graphql 模式以使用user_id: Int它确实有效但感觉做事的方式是错误的。)

一切都通过 Eloquent 正常工作,并且 graphql 查询正常工作,正确拉入相关对象。

注意:根据文档,我在模型中定义了关系的返回类:

class Post extends Model
{
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}

以及相关的迁移:

Schema::create('posts', function (Blueprint $table) {
  $table->id();
  $table->foreignId('user_id')->constrained();
  $table->string('text');
  ...
4

2 回答 2

0

好的,问题是虽然模型中定义了返回类型,但是我上面导入失败:

use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
    public function user(): BelongsTo
    ...

‍♂️</p>

于 2020-04-27T16:20:04.803 回答
0

我不确定,但正在使用正确的 Keys 吗?在 php 中,我的管理员转到设计器部分并选择关系,如果你得到更清晰的错误以了解更多关于设计器的信息,请点击此链接 https://kb.bodhost.com/turn-the-designer-mode-on-in- phpmyadmin/

于 2020-04-27T15:20:34.437 回答