@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.