我很难理解如何通过灯塔建立关系。假设我有一个Post
模型,belongsTo
是User
。在我的schema.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
我觉得我做错了什么,这个突变没有更新关系的正确栏,有人能告诉我我可能做错了什么吗(如果我在数据库中使用默认值使列可以为null,则会插入它,但关系当然不正确。我也可以调整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');
...
我不确定,但使用的是正确的Keys?在php中,我的管理员转到设计器部分并选择关系如果你得到将得到更明确的错误要了解有关设计器的更多信息,请访问此链接https://kb.bodhost.com/turn-the-designer-mode-on-in-phpmyadmin/
好的,问题是尽管在模型中定义了返回类型,但我未能在上面导入它:
use IlluminateDatabaseEloquentRelationsBelongsTo;
class Post extends Model
{
public function user(): BelongsTo
...
🤦♂️