首页 > 解决方案 > Laravel Lighthouse Graphql belongsToMany 具有枢轴值的突变

问题描述

我有一些通过 belongsToMany 关系中的数据透视表关联的 Laravel 模型。
现在我尝试在 Laravel Lighthouse 中创建一个突变来加入模型并填充枢轴值。
不知何故,我无法找到如何做到这一点。

课程模型如下所示:

class Course extends Model
{
    public function programs(): BelongsToMany
    {
        return $this->belongsToMany(\App\Models\Program::class, 'Course_Program')
                    ->withPivot('id', 'year_id')
                    ->withTimestamps();
    }
}

我的 GraphQL 代码如下所示:

type Mutation {
    createCourse(input: CreateCourseInput! @spread): Course! @create
}

type Course {
    id: ID!
    name: String!
    programs: [ProgramWithPivot!]! @belongsToMany
}

type Program {
    id: ID!
    name: String!
}

type ProgramWithPivot {
    id: ID!
    name: String!
    year_id: ID!
}

input CreateCourseInput {
    name: String!
    programs: CreateCourseProgramsRelation!
}

input CreateCourseProgramsRelation {
    create: [CreateCourseProgramInput!]
}

input CreateCourseProgramInput {
    id: ID!
    year_id: ID!
}

问题是当我尝试在我的课程中创建这样的程序时:

mutation {
  createCourse(input: {
    name: "new cours"
    programs: {
      create: [{
        id: 1
        year_id: 2
      }]
    }
  }) {
    id
    programs {
      id
      year_id
    }
  }
}

Laravel Lighthouse 尝试将数据插入Program表(并抱怨 Program.name 没有默认值)。
但是,我想将数据(course_id、year_id 和 program_id)插入Course_Program表。

如何告诉 Laravel Lighthouse 在数据透视表中插入数据?

标签: laravelgraphqllaravel-lighthouse

解决方案


变异数据透视数据目前不存在,但我上周为此做了 PR。可以关注 PR 进度

一般来说,它会以我的方式包含在内,或者可能有点不同。本期讨论

现在,您只能使用自定义解析器/指令来更新您的数据透视数据。但可能最好的方法就是等到 PR 被合并。


推荐阅读