2017-01-20 1 views
0

부모의 키에서 하위 엔티티를 가져와야합니다. 가능한 경우에도 나는 모른다. 하지만 제가 시도하는 것은 다음과 같습니다 : ancestor key datastore로 엔티티를 얻는 방법은 무엇입니까?

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

그러나 위의 두 경우 모두에서

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

는 아무것도 저를 반환하지 않습니다. 내가 뭘 놓치고 있는지 말해 줄 수 있니?

예를 들어

이 쿼리 :

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

종류 Building 이름 C으로 루트 개체의 종류 Floor의 모든 자식 개체를 반환합니다

+0

첫 번째 예에서는 키가 불완전하기 때문에 오류가 발생합니다 (마지막 경로 요소에 ID/이름/식별자 없음). 두 번째 예제가 작동해야합니다. 조상 키와 그것이 반환 할 것으로 기대하는 엔터티의 키의 예를들 수 있습니까? –

+0

예,이 '$ key = $ datastore-> 키 ($ this-> entity_kind, $ this-> entity_key)와 같은 첫 번째 예제에서 엔티티 키를 제공하려고했을 때'결과가 반환되었지만 부모 엔티티에서 ('user'라고 말하면) 하위 엔티티의 키에 대한 기록이 없지만 하위 엔티티를 가져와야합니다 ('service'라고 말하면됩니다). 이제 어떻게 접근해야합니까? 부모 엔티티를 사용하여 하위 엔티티를 가져와야합니다. – MKB

+0

답변을 추가했습니다. 기본적으로 두 번째 예제와 같은 쿼리를 사용해야합니다. 당신의 예제처럼'$ ancestorKey'를 생성하기 만하면, 당신은'hasAncestor ($ this-> parent_key)'를 호출 할 수 있습니다. –

답변

1

당신은 아이 엔티티를 찾기 위해 상위 쿼리를 사용할 수 있습니다 :

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

조회 (쿼리와 대조적으로)는 미리 전체 키를 알고 있어야합니다. 루트 엔티티의 하위 엔티티를 찾는 데 사용할 수 없습니다.

+0

감사합니다. 많은 시간을 절약 할 수 있습니다 :) 더 많은 정보를 얻으려면 여기를 참고하십시오. (http://qiita.com/idaaki/items/926d0c799e3a328d27b2) – MKB

관련 문제