2017-01-20 18 views
0

私は親のキーからサブエンティティを取得する必要があります。私はたとえそれが可能であっても知らない。ancestor key datastoreでエンティティを取得する方法は?

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; 
} 

しかし、それは私には何も返されません上記の例の両方で:しかし、私が試したことは以下の通りです。何が欠けているのか教えていただけますか?

+0

キーが不完全(最後のパス要素にID /名前/識別子がありません)ため、最初の例ではエラーが発生します。 2番目の例が有効です。祖先キーとそれが返すことを期待しているエンティティのキ​​ーの例を挙げることができますか? –

+0

はい、この '$ key = $ datastore->キー($ this-> entity_kind、$ this-> entity_key)のような最初の例でエンティティキーを与えようとしたときに、結果が返されましたが、親エンティティ( 'user'と言うことができます)にはサブエンティティのキ​​ーの記録はありませんが、サブエンティティを取得する必要があります(' service'と言うことができます)。今私はそれにどのように接近すべきですか?サブキーを親キーで取得する必要があります。 – MKB

+0

私は答えを加えました。基本的には、2番目の例のようにクエリを使用する必要があります。あなたの例のように '$ ancestorKey'を構築するのではなく、単に' hasAncestor($ this-> parent_key) 'を呼び出すことができます。 –

答えて

1

あなたは子エンティティを見つけるために、祖先クエリを使用することができます。

たとえば、次のクエリ:

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

は親切Buildingと名前のルートエンティティの種類Floorのすべての子エンティティを返しますC

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

ルックアップ(クエリとは対照的に)では、フルキーを事前に知っている必要がありますルートエンティティの子エンティティを見つけるために使用することはできません。

+0

ありがとう@Ed。あなたは私の時間の多くを保存しました:)もっと私たちはこれを参考にすることができます。 (http://qiita.com/idaaki/items/926d0c799e3a328d27b2) – MKB

関連する問題