Решил свой вопрос созданием класса мутатора, все шаги описаны ниже
Добавляем пакет кастомных типов данных
composer require mll-lab/graphql-php-scalars
Создаем класс мутатор
php artisan lighthouse:mutation ClassNameMutator
По пути /yourPath/appName/app/GraphQL/Mutations будет создан файл ClassNameMutator.php
Пишем в самом конце свой метод createOrUpdate
use App\Models\ModelName;
...
public function createOrUpdate($rootValue, array $args, GraphQLContext $context)
{
$model = ModelName::find($args['id']);
if ($model == null) {$model = new ModelName();}
$model->fill($args)->save();
$model = ModelName::select($args['field'])->find($args['id']);
return $model;
}
В файле /yourPath/appName/graphql/schema.graphql прописываем следующее:
"A Json string with format normal Array"
scalar Mixed @scalar(class: "MLL\\GraphQLScalars\\Mixed")
...
type Mutation {
uoiModel(input: uoi! @spread): Mixed @field(resolver: "ClassNameMutator@createOrUpdate")
}
input uoi{
id: ID! //Поле таблицы в запрос
otherField: ID //Поле таблицы в запрос
field: Mixed //Поля, которые нужны в ответ, указываются в виде простого массива ["field1","field2","fieldn"]
}
Теперь у нас есть мутация, которой можно легко пользоваться, запрос будет таким:
mutation {
uoiModel(
input: {
id: 900003
status: 49
field: [
"id",
"status"
]
}
)
}
Данное решение подходит для таблиц как с инкрементным id, так и без