#php #couchdb #guzzle #couchdb-2.0
#php #couchdb #guzzle #couchdb-2.0
Вопрос:
Я получаю данные из Couchdb в PHP с помощью библиотеки Guzzle. Теперь я извлекаю данные в формате POST следующим образом:
Но мне нужен такой ответ:
{
"status": 200,
"message": "Success",
"device_info": {
"_id": "00ab897bcb0c26a706afc959d35f6262",
"_rev": "2-4bc737bdd29bb2ee386b967fc7f5aec9",
"parent_id": "PV-409",
"child_device_id": "2525252525",
"app_name": "Power Clean - Antivirus amp; Phone Cleaner App",
"package_name": "com.lionmobi.powerclean",
"app_icon": "https://lh3.googleusercontent.com/uaC_9MLfMwUy6pOyqntqywd4HyniSSxmTfsiJkF2jQs9ihMyNLvsCuiOqrNxNYFq5ko=s3840",
"last_app_used_time": "12:40:04",
"last_app_used_date": "2019-03-12"
"bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorGBgkJllYmiclJxkkG5klmhuYJaYlW5paphibppkZmRmB9HHA9BGlIwsAq0kecQ",
"warning": "no matching index found, create an index to optimize query time"
} }
Я удаляю только «docs»: [{}]
-> Кто-нибудь знает, что я удаляю это?
проверьте мой код:
$response = $client->post(
"/child_activity_stat/_find",
[GuzzleHttpRequestOptions::JSON => ['selector' => ['parent_id' => ['$eq' => $userid], 'child_device_id' => ['$eq' => $deviceid]],]]
);
if ($response->getStatusCode() == 200) {
$result = json_decode($response->getBody());
$r = $response->getBody();
json_output(200, array(
'status' => 200,
'message' => 'Success',
"device_info" => $result
));
}
Комментарии:
1. Зачем вам это нужно таким образом? Вся информация уже там. Кроме того, ваш необходимый ответ ошибочен
2. Потому что мне нужны данные в этом формате, но couchdb возвращает данные в «docs»: [{}]
3. если какая-либо информация уже есть, пожалуйста, предоставьте мне ссылку? я проверяю это, спасибо
Ответ №1:
Вам просто нужно изменить свою структуру данных.
ПРИМЕЧАНИЕ: Возможно, вам следует добавить ограничение в 1, если вы хотите получить только один документ. Вам также нужно будет проверить, что результат [‘docs’] не пуст.
Пример:
<?php
$response = $client->post(
"/child_activity_stat/_find",
[GuzzleHttp RequestOptions::JSON => ['selector' => ['parent_id' => ['$eq' => $userid], 'child_device_id' => ['$eq' => $deviceid]], ]]
);
if ($response->getStatusCode() == 200) {
// Parse as array
$result = json_decode($response->getBody(),true);
// Get the first document.
$firstDoc = $result['docs'][0];
// Remove docs from the response
unset($result['docs']);
//Merge sanitized $result with $deviceInfo
$deviceInfo = array_merge_recursive($firstDoc,$result);
json_output(200, array(
'status' => 200,
'message' => 'Success',
"device_info" => $deviceInfo
));
}
Ответ №2:
В couchdb запрос PUT используется для редактирования или добавления данных и УДАЛЕНИЯ данных
$client = new GuzzleHttpClient();
// Put request for edit
$client->put('http://your_url', [
'body' => [
'parent_id' => ['$eq' => $userid],
'child_device_id' => ['$eq' => $deviceid]
],
'allow_redirects' => false,
'timeout' => 5
]);
// To delete
$client->delete('htt://my-url', [
'body' = [
data
]
]);
Комментарии:
1. Но я получаю данные, используя Guzzle, а не Curl
2. @muhammadabubakar теперь вы можете увидеть это с помощью guzzle
3. спасибо за ответ. я получаю данные в «docs»: [{}] но мне не нужен этот формат, пожалуйста, проверьте вопрос еще раз
4. @muhammadabubakar я думаю, что это ошибка конфигурации, а не кода. Пожалуйста, проверьте всю вашу конфигурацию.