Как сделать insert ... on duplicate key update в lighthouse php на laravel?

Пользователь

от dayna , в категории: PHP , 2 года назад

Как сделать insert ... on duplicate key update в lighthouse php на laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от lori_jast , 2 года назад

@dayna 

Для выполнения операции insert ... on duplicate key update в Lighthouse PHP на Laravel можно использовать метод updateOrCreate() объекта модели.


Для этого необходимо выполнить следующие шаги:

  1. Определить модель, которая соответствует таблице базы данных:


  1. Создать GraphQL-запрос с аргументами, которые будут использованы для создания или обновления записи в базе данных. Например, для модели User запрос может выглядеть следующим образом:
1
2
3
4
5
6
7
mutation ($input: UserInput!) {
  upsertUser(input: $input) {
    id
    name
    email
  }
}


Здесь UserInput - это входные данные запроса, которые могут содержать поля name и email.

  1. Создать мутацию upsertUser() в файле app/Graphql/Mutations/UpsertUserMutation.php. В этой мутации вызывается метод updateOrCreate() модели User и передаются входные данные:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 'upsertUser'
    ];

    public function type(): Type
    {
        return GraphQL::type('user');
    }

    public function args(): array
    {
        return [
            'input' => ['name' => 'input', 'type' => GraphQL::type('userInput')]
        ];
    }

    public function resolve($root, $args)
    {
        $input = $args['input'];

        return User::updateOrCreate(
            ['email' => $input['email']],
            ['name' => $input['name']]
        );
    }
}


Здесь ['email' => $input['email']] - это условие для поиска записи в базе данных. Если запись не найдена, будет создана новая запись с полями ['email' => $input['email'], 'name' => $input['name']]. Если запись уже существует, будет обновлено только поле name.

  1. Добавить мутацию UpsertUserMutation в файл app/GraphQL/Mutations/Mutation.php:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 'Mutation',
        'description' => 'Base mutation'
    ];

    public function fields(): array
    {
        return [];
    }

    public function type(): Type
    {
        return GraphQL::type('null');
    }

    public function resolve($root, $args)
    {
        return null;
    }

    // add your mutations here
    protected function UpsertUserMutation()
    {
        return new UpsertUserMutation;
    }
}


Теперь можно использовать мутацию upsertUser() для создания или обновления записей в базе данных в Lighthouse PHP на Laravel.