首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Laravel Lighthouse @rename指令对我不起作用?

为什么Laravel Lighthouse @rename指令对我不起作用?
EN

Stack Overflow用户
提问于 2019-12-03 17:57:45
回答 1查看 403关注 0票数 2

我有这个GraphQL查询:

代码语言:javascript
复制
mutation CreateBudget(
  $revenue: Float!,
  $hours: Int!,
  $projectId: Int!,
) {
  createBudget(
    revenue: $revenue,
    hours: $hours,
    projectId: $projectId,
  ) {
    id
  }
}

作为最佳实践,我想在这里使用camelcase,但在我的数据库中使用snake_case。表格如下所示:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `budgets` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `revenue` double(8,2) NOT NULL,
  `hours` int(11) NOT NULL,
  `project_id` int(10) unsigned NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `budgets_project_id_foreign` (`project_id`),
  CONSTRAINT `budgets_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我使用Lighthouse's @rename directive在两个外壳之间进行转换。但是,在运行查询时,当提交查询时,代码的某些部分似乎无法识别项目id,从而导致以下SQL错误:

代码语言:javascript
复制
SQLSTATE[HY000]: General error: 1364 Field 'project_id' doesn't have a default value (SQL: insert into `budgets` (`revenue`, `hours`, `updated_at`, `created_at`) values (1200, 12, 2019-12-03 09:12:13, 2019-12-03 09:12:13))

发送的变量为

代码语言:javascript
复制
variables: {
    revenue: 1200,
    hours: 12,
    projectId: 1
}

这是我的schema.graphql的外观,在预算类型上使用@rename指令:

代码语言:javascript
复制
type Budget {
  id: ID!
  revenue: Float!
  hours: Int!
  projectId: Int! @rename(attribute: "project_id")
  project: Project! @belongsTo
  created_at: DateTime
  updated_at: DateTime
}

type Mutation {
    createBudget(
        revenue: Float!
        hours: Int!
        projectId: Int!
    ): Budget @create(model: "App\\Models\\Budget\\Budget")
}

我肯定忽略了一些简单的东西,但我似乎找不到它。有人想试一试吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 21:17:30

从4.7版开始支持对突变使用rename指令,并且需要在突变中的属性上额外声明rename指令。

您的突变应该如下所示:

代码语言:javascript
复制
type Mutation {
    createBudget(
        revenue: Float!
        hours: Int!
        projectId: Int! @rename(attribute: "project_id")
    ): Budget @create(model: "App\\Models\\Budget\\Budget")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59154394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档