如何更新 google 数据存储上实体的特定属性?
How to update particular attribute of entity on google datatstore?
我正在 php 中集成 google 数据存储 api。我正在尝试更新 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
更新它。我错过了什么你能解释一下吗?
您是否尝试过在更新之前通过密钥获取实体?那么你应该可以在不丢失属性的情况下修改它。
Also if I try to create a sub entity lets say logs I am unable to retain its old entities when update it with a new one.
让我们调用您的父实体 User
和子实体 Log
。您是否尝试过让每个用户拥有多个 Log 实体,也许由创建时间作为键(当然,User 键是父键)?实际上,您将为每个事件的给定用户添加不更新日志实体。
我正在 php 中集成 google 数据存储 api。我正在尝试更新 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
更新它。我错过了什么你能解释一下吗?
您是否尝试过在更新之前通过密钥获取实体?那么你应该可以在不丢失属性的情况下修改它。
Also if I try to create a sub entity lets say logs I am unable to retain its old entities when update it with a new one.
让我们调用您的父实体 User
和子实体 Log
。您是否尝试过让每个用户拥有多个 Log 实体,也许由创建时间作为键(当然,User 键是父键)?实际上,您将为每个事件的给定用户添加不更新日志实体。