Как сделать mutation чтобы был запрос в БД insert or update
?
В Laravel есть чудесная функция Model::createOrUpdate($array)
, а как это сделать с помощью lighthouse ума не приложу.
Решил свой вопрос созданием класса мутатора, все шаги описаны ниже
Добавляем пакет кастомных типов данных
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, так и без
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вообщем есть такая проблема, я вывожу данную на страницу в 3 разных массивахВот так:
Создаю в папке с помощью цикла for документы с разным наполнениемЭто наполнение подтягивают из json
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме
Сколько максимум строк и столбцов помещается в mysql? и как этот лимит расширить?