Получить все документы из моей коллекции с помощью firestore PHP - PullRequest
0 голосов
/ 29 мая 2020

Здравствуйте, у меня есть следующая база данных в firestore, и этот код, из которого я получаю документы коллекции "ride".

enter image description here

$db = new FirestoreClient([
     'projectId' => 'taxi-17b9c',
   ]);

$citiesRef = $db->collection('ride');
$documents = $citiesRef->documents();
foreach ($documents as $document) {
    if ($document->exists()) {
        print json_encode($document->data(), JSON_PRETTY_PRINT);
    }

В основном мой вопрос: почему, когда я возвращаю $document-> data(), у меня есть только json одного документа, а когда я возвращаю print_r ($document-> data()) или json_encode ($document-> data()), информация полная.

Я хочу перебрать коллекцию "ride" и получить в формате json данные имеющихся у меня документов.

Что мне нужно добавить? Спасибо! Ура!

1 Ответ

0 голосов
/ 30 мая 2020

Если это код php вашего сервера и вы заменили только «print» на «return», ваша функция вернет только data() из одного существующего $document, а в вашем случае только data() из первый существующий $document.

Если это весь ваш код, вы можете попробовать заменить «print» на «echo» :

$db = new FirestoreClient([
     'projectId' => 'taxi-17b9c',
   ]);

$citiesRef = $db->collection('ride');
$documents = $citiesRef->documents();
foreach ($documents as $document) {
    if ($document->exists()) {
        echo json_encode($document->data(), JSON_PRETTY_PRINT);
    }
}

Вы можете также соберите существующий $document в новый объект или массив, чтобы вернуть его как одну строку, как показано в следующих простых примерах.

Дополнительные «простые» примеры

<?php
$testObjs = array(
    'object1' => array('info'=>'taxi-17b9c', "foo"=>"bar"),
    'object2' => array('info'=>'taxi-17b9c'),
    'object3' => array('info'=>'taxi-23', "foo"=>"bla")
   );

echo "echo as single object strings: \n";
foreach ($testObjs as $obj) {
    if(isset($obj["foo"])){
        echo json_encode($obj, JSON_PRETTY_PRINT);
    }
}


echo "\nexample return as one string array: \n";
echo showReturn($testObjs);

function showReturn($testObjs){
    $new_testObjs = array();
    foreach ($testObjs as $obj) {
        if(isset($obj["foo"])){
            array_push($new_testObjs, $obj);
        }
    }
    return json_encode($new_testObjs, JSON_PRETTY_PRINT);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...