Как сделать insert … on duplicate key update в Lighthouse-php на Laravel?

148
27 мая 2021, 13:00

Как сделать mutation чтобы был запрос в БД insert or update?

В Laravel есть чудесная функция Model::createOrUpdate($array), а как это сделать с помощью lighthouse ума не приложу.

Answer 1

Решил свой вопрос созданием класса мутатора, все шаги описаны ниже

Добавляем пакет кастомных типов данных

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, так и без

READ ALSO
Обновление через pjax

Обновление через pjax

Вообщем есть такая проблема, я вывожу данную на страницу в 3 разных массивахВот так:

135
Как сделать вложенный цикл foreach в for?

Как сделать вложенный цикл foreach в for?

Создаю в папке с помощью цикла for документы с разным наполнениемЭто наполнение подтягивают из json

122
С чего начать программировать? [закрыт]

С чего начать программировать? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

124
Расширить лимит строк и столбцов mysql

Расширить лимит строк и столбцов mysql

Сколько максимум строк и столбцов помещается в mysql? и как этот лимит расширить?

126