2017-01-14 7 views
2

PHP에서 Google datastore api를 통합하려고합니다. Google datastore에서 엔티티를 업데이트하려고합니다.Google datatstore에서 엔티티의 특정 속성을 업데이트하는 방법은 무엇입니까?

  $property_map [ 'full_name' ]  = set_string_value(isset($data [ 'full_name' ]) ? $data [ 'full_name' ] : $data [ 'name' ]); 
      $property_map [ 'email' ]   = set_string_value($data [ 'email' ]); 
      $property_map [ 'password' ]   = set_string_value(isset($data [ 'password' ]) ? md5($data [ 'password' ]) : md5(rand()), true); 
      $property_map [ 'country' ]   = set_string_value(isset($data [ 'country' ]) ? $data [ 'country' ] : 'null'); 
      $property_map [ 'timezone' ]   = set_string_value(isset($data [ 'timezone' ]) ? $data [ 'timezone' ] : 'America/Chicago'); 
      $property_map [ 'type' ]    = set_string_value('free'); 

모든 필드가 하나만 업데이트되는 경우에도 모든 속성을 제공해야합니다. 그렇지 않으면 모든 데이터가 손실됩니다. 또한 하위 엔티티를 만들려고하면 logs라고 말하면 새 엔티티로 업데이트 할 때 이전 엔티티를 유지할 수 없습니다. 아무도 도와 줄 수 있니?

안녕하세요 @ 프랭크 예 다음 코드를 사용하여 키를 사용하여 엔티티를 얻었습니다.

/* 
*Function to lookup an entity. 
*/ 
function lookup_request($entity_kind,$entity_id){ 
    $instance = & get_instance(); 
    $service = set_google_datastore(); 
    $req  = get_entity($entity_kind,$entity_id); 
    return $service->projects->lookup($instance->config->item('google_project_id'),$req,[]); 
} 

/* 
*Function to set datatsore instance. 
*/ 
function set_google_datastore(){ 
    return new Google_Service_Datastore(google_set_client()); 

} 
/* 
*Function to set mutation to get entity. 
*/ 
function get_entity($entity_kind,$entity_id){ 
    $path = new Google_Service_Datastore_PathElement(); 
    $path->setKind($entity_kind); 
    $path->setId($entity_id); 

    $key = new Google_Service_Datastore_Key(); 
    $key->setPath([$path]); 

    $req = new Google_Service_Datastore_LookupRequest(); 
    $req->setKeys($key); 
    return $req; 
} 

위의 코드를 사용하면 개체를 가져올 수 있습니다. 이제 업데이트하려면 어떻게해야합니까? setUpdate을 사용하여 업데이트 중입니다. 내가 뭘 놓치고 설명 할 수 있니?

+1

GAE 데이터 저장소에 엔티티를 저장하면 전체 엔티티가 직렬화되어 (다시) 쓰여집니다. 해당 속성의 하위 집합 만 업데이트하려면 먼저 엔티티를 읽은 다음 원하는 속성을 수정하고 엔티티를 저장해야합니다. –

+1

PHP GDS 라이브러리를 체크 아웃 한 적이 있습니까? 이걸 똑바로 많이 만듭니다. (IMHO) – Tom

+0

https://github.com/tomwalder/php-gds – Tom

답변

1

엔티티를 업데이트하기 전에 키를 가져 오는 것이 낫습니까? 그런 다음 속성을 잃지 않고 수정할 수 있어야합니다.

또한 내가 하위 개체를 만들려고하면 내가 옛 엔티티 새 제품으로 업데이 트를 유지 드릴 수 없습니다 로그를 말할 수 있습니다.

엔티티 User 및 서브 엔티티 Log 부모 호출 할 수 있습니다. 아마도 사용자 당 하나 이상의 Log 엔티티 (아마도 User 키가 부모가되는)가 생성 시간에 따라 키워 졌습니까? 효과적으로 각 이벤트에 대해 주어진 사용자에 대한 로그 엔티티를 업데이트하지 않을 것입니다.

+0

안녕하세요. 질문을 업데이트했습니다. 지금 확인하십시오. – MKB