Ошибка при попытке создать вложенную коллекцию в Firestore - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь создать узел в Google Firebase и использовать его уникальный идентификатор для создания документа в Google Firestore с тем же именем.

Я использую клиент Google Firestore PHP: https://github.com/GoogleCloudPlatform/google-cloud-php-firestore

И я прочитал их документацию: http://googlecloudplatform.github.io/google-cloud-php/#/docs/cloud-firestore/v0.5.1/firestore/writebatch

Вот мой код:

<?php

use \Google\Cloud\Firestore\FirestoreClient;
use \Google\Cloud\Core\Timestamp;
use \Google\Cloud\Firestore\Transaction as FirestoreTransaction;
use \grptx\Firebase as FirebaseClient;

class FirestoreTest
{
    public function create()
    {
        $client = new FirebaseClient();
        $database = $client->getDatabase();

        $org = array(
            "acl" => array(),
            "people" => array()
        );

        $ref = $database->getReference("/clients/")->push($org);
        $key = $ref->getKey();

        $config = array(
            "projectId" => "xxx",
            "keyFile" => json_decode(file_get_contents("/xxx/firebase_auth.json"), true)
        );

        $firestore = new FirestoreClient($config);
        $batch = $firestore->batch();
        $collection = $firestore->collection("clients")->document("-LXXXXXX")->collection("trips");
    }
}

И я получаю эту ошибку:

Exception 'Google\Cloud\Core\Exception\BadRequestException' with message '{
"message": "Document name \"projects\/xxx-test\/databases\/(default)\/documents\/clients\/\" has invalid trailing \"\/\".",
"code": 3,
"status": "INVALID_ARGUMENT",
"details": []
}'

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 апреля 2019

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

Я не знаю PHP, но я бы предположил, что либо в вашем $ database-> getReference ("/ clients /") -> push ($ org);call, вы должны были назвать документ для отправки вашей информации или в вашу коллекцию $ firestore-> («клиенты») -> документ («- LXXXXXX») -> коллекция («поездки»);вызовите, чтобы документ, который вы пытаетесь получить ("-LXXXXXX"), имел пустую строку с именем.(Конечно, это предполагает, что ваш документ на самом деле не называется «-LXXXXXX», и вы используете его в качестве замены для некоторой переменной, которая оказывается равной «»).

Например, вpython этот вызов случайно дал мне ошибку раньше:

db.collection(u'data').document(current_id)

с той же ошибкой: 'Имя документа "... / documents / data /" имеет недействительный трейлинг "/".и выйду.Я почесал голову некоторое время, но это потому, что переменная current_id является пустой строкой.

По сути, Firebase внутренне преобразует его в длинное имя пути и затем пытается получить документ или коллекцию по этому пути в зависимости от того, каким был ваш последний вызов.Это вызывает проблему, если вы пытаетесь получить документ с именем "".

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