1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel + LighthouseなGraphQLサーバで新しいスキーマを追加する手順

Last updated at Posted at 2021-11-05

GraphQL便利ですね!もっと設計したいです。
LaravelでLighthouseを使った実装を進めていて、新しいスキーマを追加する手順についてまとめました。

今まで多くのスキーマを追加してきましたが、基本的には テーブル === モデル === スキーマという対応をしています。
そうすることで実装に一貫性をもたせ、スキーマ追加までを手早く行うことができます。
その際の手順についてまとめました。

Sail環境の場合にはphpsailに置き換えてください。

1. サーバサイド

  1. モデル+マイグレーション作成
  2. スプレッドシート
  3. シーダー

1.1. モデル+マイグレーション作成

$ php artisan make:model Post -m
2021_11_05_111111_create_posts_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up() {
		if ( Schema::hasTable( env( 'DB_TABLE_PREFIX' ) . 'banks' ) ) {
			return;
	}
		Schema::create('posts', function ( Blueprint $table ) {
			$table->id()->comment( 'ID' );
			$table->string( 'code' )->nullable()->comment( '検索用コード' );
			$table->string( 'name' )->nullable()->comment( 'ポスト名' );
			$table->timestamps();
			$table->softDeletes( 'deleted_at' )->comment( '削除日時' );
		});
		DB::statement( "ALTER TABLE banks comment 'ポスト'" );
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down() {
		Schema::disableForeignKeyConstraints();
		Schema::dropIfExists( 'posts' );
		Schema::enableForeignKeyConstraints();
	}
}

1.2. スプレッドシート

Googleスプレッドシートにテストデータを作成しておきます。

image.png

GSS API を使ってテストデータをJSON化をします。

image.png

/database/seed/Posts.json
[
  {
    "ID": "1",
    "code": "1",
    "name": "投稿タイトル1",
    "created": "2021-11-05 06:09:51",
    "modified": "2021-11-05 06:09:51"
  },
...

1.3. シーダー

シードクラスを作成して読み込みを行います。

/database/seeders/PostSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class BankSeeder extends Seeder {

	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run() {
		\App\Models\Post::factory( 10 )->create();
	}
}

ここまでできたらマイグレーション等の実行をして試しておきます。

2. GraphQL(Lighthouse)

サーバサイドのGraphQLを作成します。

  1. スキーマ
  2. Query
  3. Mutation

2.1. スキーマ

/graphql/schemas/post.graphql

"投稿"
type Post {
  id: ID!
  "コード"
  code: String
  "投稿タイトル"
  name: String
  "非表示"
  invisible: Boolean
}

2.2. Query

Queryを書きます。

/graphql/query/post.graphql
extend type Query @guard {
  "投稿一覧取得"
  Posts: [Post!]! @paginate(type: CONNECTION)
  "投稿取得"
  Post(id: Int! @eq): Post @find
}

2.3. Mutation

Mutationを書きます。

/graphql/mutation/post.graphql
extend type Mutation @guard {
  "投稿入力"
  mutationPost(input: InputDailyDrivingReport @spread): Post @upsert
}

input InputPost {
  "ID"
  id: ID
  "コード"
  code: String
  "投稿タイトル"
  name: String
}

上記でサーバサイドの実装が完成します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?