2

私はこのGraphQLクエリを持っています:

mutation CreateBudget(
  $revenue: Float!,
  $hours: Int!,
  $projectId: Int!,
) {
  createBudget(
    revenue: $revenue,
    hours: $hours,
    projectId: $projectId,
  ) {
    id
  }
}

ベスト プラクティスとして、ここでは camelcase を使用しますが、データベースでは snake_case を使用します。テーブルは次のようになります。

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 の @rename ディレクティブを使用します。ただし、クエリを実行すると、クエリを送信すると、コードの一部がプロジェクト ID を認識しないようで、次の SQL エラーが発生します。

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))

送信される変数は次のとおりです。

variables: {
    revenue: 1200,
    hours: 12,
    projectId: 1
}

Budget タイプで @rename ディレクティブを使用すると、私の schema.graphql は次のようになります。

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")
}

何か単純なものを見落としていたに違いありませんが、それを見つけることができないようです。試してみたい人はいますか?

4

1 に答える 1