Я работаю над обновлением информации о пользователе с помощью googleapi в php.

Когда я запускаю этот код, он сделает предварительно заданное поле, которое я не хочу обновлять, пустым. Поскольку в этом коде я не устанавливаю заголовок, поскольку заголовок уже установлен, но как только я запустил этот код, заголовок станет пустым.

Как я могу это решить?

$organization = new \Google\Service\Directory\UserOrganization();
        $organization->setPrimary(TRUE);
      //  $organization->setTitle('Lead Developer');
        $organization->setDepartment('Dev');
        $googleUser->setOrganizations([$organization]);
        
        $gsdService->users->update('fname.lname@domain.com', $googleUser);
1
ItsAna 4 Фев 2022 в 14:05
Почему вы начинаете с нового экземпляра UserOrganization вместо выборки текущего экземпляра через API?
 – 
CBroe
4 Фев 2022 в 14:24
Как мне это сделать? ничего не могу найти как мне это сделать
 – 
ItsAna
4 Фев 2022 в 14:30
Предположительно, пользовательский объект будет иметь метод не только для установки организаций, но и для получения их... Если вы не уверены, какой метод существует, вам следует проверьте документацию библиотеки, которую вы там используете.
 – 
CBroe
4 Фев 2022 в 14:34
Я не устанавливаю заголовок, но он становится пустым и не остается прежним
 – 
ItsAna
4 Фев 2022 в 14:45

2 ответа

Проблема в том, что вы используете метод user.update. Этот метод использует методологию HTTP Put и будет обновлять все в объекте точно так, как вы его отправляете. Таким образом, не отправляя заголовок, вы сообщаете системе, что хотите, чтобы это поле было пустым.

Если вы хотите обновить только отправляемые файлы, вам следует использовать users.patch, который следует методологии HTTP Patch и обновляет только те свойства, которые отправляются в объекте пользователя.

$organization = new \Google\Service\Directory\UserOrganization();
$organization->setPrimary(TRUE);
$organization->setDepartment('Dev');
$googleUser->setOrganizations([$organization]);
    
$gsdService->users->patch('fname.lname@domain.com', $googleUser);
0
DaImTo 4 Фев 2022 в 14:48
Я попробовал патч, и он работает так же, как и обновление, поле заголовка все еще становится пустым.
 – 
ItsAna
4 Фев 2022 в 15:07
Может тогда это баг. Я бы взял его и взял текущий заголовок, а затем просто повторно применил его в вашем обновлении. Вы должны сделать это с некоторыми API.
 – 
DaImTo
4 Фев 2022 в 15:12

В то время как документация для users.update указывает :

Этот метод поддерживает семантику исправления, то есть вам нужно включить только те поля, которые вы хотите обновить. Поля, которых нет в запросе, будут сохранены

В документации для orgunits.update просто говорится :

Обновляет организационное подразделение.

Таким образом, вы не можете ожидать, что orgunits.update сохранит неуказанные поля, и это не ошибка.

Вы можете отправить запрос функции, чтобы попросить поддержать семантику исправления для orgunits.update.

А пока, если у вас есть проблемы с перезаписью непустых полей, рассмотрите возможность обходного пути, указав в запросе orgunits.update все поля, которые вы не хотите, чтобы они стали пустыми.

0
ziganotschka 4 Фев 2022 в 15:28