如何在google datatstore上更新实体的特定属性?

时间:2017-01-14 10:03:11

标签: php google-app-engine google-api-php-client datastore

我正在整合google datastore api在php中。我正在尝试更新Google数据存储区中的实体。

            $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我无法在使用新实体更新它时保留其旧实体。有人可以帮忙吗?

您好@Frank是的我使用以下代码按键获得了实体。

/*
 *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 个答案:

答案 0 :(得分:1)

在更新之前,您是否尝试过按键获取实体?然后你应该能够修改它而不会丢失属性。

  

此外,如果我尝试创建一个子实体,让我们说日志,当用新的实体更新它时,我无法保留它的旧实体。

让我们调用您的父实体User和子实体Log。您是否尝试过每个用户拥有多个Log实体,或许可以通过创建时间键入(当然,User键是父级)?实际上,您将为每个事件添加不更新给定用户的Log实体。