Как получить сущность по хранилищу данных ключа предка?

Мне нужно получить подобъект из ключа родителя. Я не знаю, даже если это возможно. Но я пробовал следующее:

public function get_service_details(){
     $datastore = new Google\Cloud\Datastore\DatastoreClient(['projectId' => $this->config->item('google_project_id')]);
     $key = $datastore->key($this->entity_kind);

     $key->ancestor($this->parent_kind, $this->parent_key);
     $server_config_details = $datastore->lookup($key);
     return $server_config_details;
}

а также

public function get_service_details(){
     $datastore = new Google\Cloud\Datastore\DatastoreClient(['projectId' => $this->config->item('google_project_id')]);
     $ancestorKey = $datastore->key($this->parent_kind, $this->parent_key);
     $query = $datastore->query()
        ->kind($this->entity_kind)
        ->hasAncestor($ancestorKey);

     $server_config_details = $datastore->runQuery($query);
     return $server_config_details;
}

Но в обоих вышеперечисленных случаях это ничего мне не вернуло. Не могли бы вы сказать мне, что мне не хватает?


person MKB    schedule 20.01.2017    source источник
comment
Первый пример должен вызвать ошибку, потому что ключ неполный (в последнем элементе пути нет идентификатора/имени/идентификатора). Второй пример должен работать. Можете ли вы привести пример ключа предка и ключа объекта, который вы ожидаете вернуть?   -  person Ed Davisson    schedule 20.01.2017
comment
Да, когда я попытался указать ключ объекта в первом примере, подобном этому $key = $datastore->key($this->entity_kind, $this->entity_key);, он вернул мне результаты, но у меня есть случай, когда в родительском объекте (скажем, user) у меня нет записи ключа его подобъекта, но Мне нужно получить подобъект (скажем, service). Теперь, как я должен подойти к этому? Мне нужно получить подобъект, используя его родительский ключ.   -  person MKB    schedule 21.01.2017
comment
Я добавил ответ. По сути, вам нужно использовать запрос (например, ваш второй пример). Вместо построения $ancestorKey, как в вашем примере, вы можете просто вызвать hasAncestor($this->parent_key).   -  person Ed Davisson    schedule 23.01.2017


Ответы (1)


Вы можете использовать запрос предка для поиска дочерних объектов:

Например, этот запрос:

SELECT Floor WHERE __key__ HAS ANCESTOR KEY(Building, 'C')

вернет все дочерние объекты типа Floor корневого объекта с типом Building и именем C:

[Building:C, Floor:1]
[Building:C, Floor:2]

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

person Ed Davisson    schedule 23.01.2017
comment
Спасибо @Эд. Вы сэкономили мне много времени :) Для получения дополнительной информации мы можем взять ссылку отсюда. (qiita.com/idaaki/items/926d0c799e3a328d27b2) - person MKB; 23.01.2017