質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

1回答

1808閲覧

Lighthouse で1つのクエリで「検索して更新」したい

gaegaelab

総合スコア9

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

1クリップ

投稿2020/03/17 11:10

PHP + Laravel + Lighthouse で GraphQL で通信をするサーバーを構築しています。
DB のテーブルを、ユニークキーではないカラムを検索して更新する処理を実装しているのですが、
1回のクエリで検索と更新を同時にする方法はないでしょうか?

検索クエリで条件にあてはまるレコードのユニークキーを取得し、
Mutation で更新する形で実装はできておりますが、
2回通信してしまっているので、できれば1つにまとめたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

同じような課題を抱えておりましたが
こちらの記事を参考にリゾルバを作成し
graphQLからは検索に必要な項目を渡し
作成したリゾルバ内でlaravelのORMを使い
検索・更新・削除を行う形で私は作成しました。
やりたい形とは違うかもしれせんが、一つのやり方として

参考記事:ID以外を指定した削除ミューテーション

以下、その際のソース抜粋です

やっていることは
Versionを検索して
該当なしはレコード新規作成
1件該当があればレコード更新
それ以外は該当レコードを削除して新規作成
該当レコードのidを返却


schema.graphql

type mutation { searchUpdateVersions( ptype: String! module: String! performer: String! version: String! ): VersionIdResponse @field(resolver: "App\GraphQL\Mutations\SearchUpdateVersion@handle") } type VersionIdResponse{ id: ID! }

SearchUpdateVersion.php

php

1<?php 2 3namespace App\GraphQL\Mutations; 4 5use GraphQL\Type\Definition\ResolveInfo; 6use Nuwave\Lighthouse\Support\Contracts\GraphQLContext; 7use App\Version; 8 9class SearchUpdateVersion 10{ 11 12 public function handle( 13 $rootValue, 14 array $args, 15 GraphQLContext $context = null, 16 ResolveInfo $resolveInfo 17 ) { 18 19 $query = Version::query(); 20 $query->where('ptype', $args['ptype']); 21 $query->where('module', $args['module']); 22 $query->where('performer', $args['performer']); 23 24 $versions = $query->get(); 25 26 $version = new Version; 27 28 switch($versions->count()){ 29 case 0: 30 break; 31 case 1: 32 $version = $versions[0]; 33 if($version->version==$args['version']){ 34 $id = $version->id; 35 return compact('id'); 36 } 37 break; 38 default : 39 foreach($versions as $obj) 40 { 41 $obj->delete(); 42 } 43 break; 44 } 45 $version->fill($args); 46 $version->save(); 47 48 $id = $version->id; 49 50 return compact('id'); 51 } 52} 53

投稿2020/07/27 06:55

tcf775

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問