Lighthouse-PHPを使用したLaravel Graphqlサーバー

みなさんこんにちは、最近行方不明になって申し訳ありませんが、仕事で忙しくて、ブログを更新する時間を見つけることができませんでした

Hello everybody, sorry I´ve been missing lately, but I´ve been busy with work, and couldn´t find the time to update the blog

##### 始めましょう

Dockerコンテナを使用してlaravelをインストールする

Install laravel using docker container

[Create Laravel Project using Docker](https://qiita.com/dabiddo/items/6c8b0d496439fecda7dc)

初期移行を実行する

Run Initial Migrations

```
sudo docker-compose exec app-server php artisan migrate
```

##### Lighthouse PHPをインストールする

Install `lighthouse-php`

`lighthouse-php`をインストールする

```
docker run --rm -v $(pwd):/app composer require nuwave/lighthouse
```

graphqlのデフォルトスキーマを公開する

Publish default schema for graphql

```
sudo docker-compose exec app-server php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" --tag=schema
```

`app-server`で、docker-composeファイルで使用する名前を忘れずに変更してください

in `app-server`, remember to change for the name you use on your docker-compose file

##### Graphql Playgroundをインストールする

次の手順はオプションですが、推奨されますが、graphql-playgroundをインストールします

Next step is optional, but recommended, install the graphql-playground

```
docker run --rm -v $(pwd):/app composer require mll-lab/laravel-graphql-playground
```

遊び場のURLは`http://localhost/graphql-playground`

url for the playground is `http://localhost/graphql-playground`

##### 構成

コンテナをもう一度実行し、 `docker-compose up --build`

graphqlのデフォルト設定をエクスポートします

run the containers once more, `docker-compose up --build`

export the graphql default config

```
docker-compose exec app-server php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" --tag=config
```

##### 突然変異とクエリ

クエリを実行する前に、データを挿入する必要があります。最初に突然変異を作成します

Before doing a query, we need to insert data, lets first create a mutation

```
sudo docker-compose exec app-server php artisan lighthouse:mutation createUser
```

これにより、 `app \ graphql \ mutations`フォルダー内に` CreateUser.php`が作成されます。

簡単なリゾルバを追加しましょう

This will create a `CreateUser.php`inside the `app\graphql\mutations` folder

Lets add a simple resolver

```php

public function __invoke($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $args["password"] = Hash::make($args["password"]);

        return User::create($args);
    }
```

`schema.graphql`ファイル内にルート変更を追加します

Add the route mutation inside the `schema.graphql` file

```
type Mutation {
    createUser(name: String!, email: String!, password: String!): User
}
```

これで、不眠症を使用しているので、簡単な突然変異を作成できます。これが私の突然変異の作成方法です

または、`http：// localhost / graphql-playground` のプレイグラウンドを使用できます

With this, you can create a simple mutation, since I´m using insomnia, this is how I create my mutation

or you can use the playground at `http://localhost/graphql-playground`

```
Insomnia POST : http://localhost/graphql
Playground : http://localhost/graphql-playground

mutation{
  createUser(name:"My Name",email:"my@email.com",password:"mypassword"){
    id,
    name,
  }
}
```

200を取得すると、応答がすでにjsonであることがわかります。クエリリクエストを作成してユーザーを確認できます。

Once you get the 200, you can see the response is already a json, we can check the users by going making a query request

```
POST: http://localhost/graphql
Playground : http://localhost/graphql-playground

query{
  users{
    data{
      id,
      name,
      email
    }
  }
}
```