@dayna
Для выполнения операции insert ... on duplicate key update в Lighthouse PHP на Laravel можно использовать метод updateOrCreate() объекта модели.
Для этого необходимо выполнить следующие шаги:
1 2 3 4 5 6 7 |
mutation ($input: UserInput!) { upsertUser(input: $input) { id name email } } |
Здесь UserInput - это входные данные запроса, которые могут содержать поля name и email.
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 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.