如何获取数据存储区实体的密钥

时间:2017-09-13 15:51:32

标签: php google-app-engine google-cloud-datastore

我选择了如下的数据存储区实体。

$query = $Datastore->query()
           ->kind('Test')
           ->filter('User', '=', $_POST['txtMail'])
           ->filter('Password', '=', $_POST['txtPwd']);

$result = $Datastore->runQuery($query);

我想在$ result中获取实体/实体的密钥/密钥,但如果我这样做:

$Entity->key();

返回0($ result中的实体为零)和1,2,3,...如果我有一个或多个实体。 我的数据存储区实体就像:

ID/Name           |       User       |         Password
Numeric AutoGen.  |  String          | String

我想要的是这样的事情:

$query = $Datastore->query()
           ->kind('Test')
           ->filter('User', '=', $_POST['txtMail'])
           ->filter('Password', '=', $_POST['txtPwd']);

$result = $Datastore->runQuery($query);
foreach ($result as $entity){
  /*how to get entity key from here*/
}

2 个答案:

答案 0 :(得分:0)

正如谷歌所说'如果你想向用户显示实体ID,和/或依赖于他们的订单,最好的办法是使用手动分配。'我为我的实体使用自定义ID并完美地工作

答案 1 :(得分:0)

实际上,有一种方法,Google数据存储区为键对象提供了函数pathEndIdentifier,您可以像这样使用它:

echo $entity->key()->pathEndIdentifier();

使用您以前的代码,这是一个更好的示例:

$query = $Datastore->query()
       ->kind('Test')
       ->filter('User', '=', $_POST['txtMail'])
       ->filter('Password', '=', $_POST['txtPwd']);

$result = $Datastore->runQuery($query);
foreach ($result as $entity){
    // get the entity id using pathEndIdentifier()
    echo $entity->key()->pathEndIdentifier();
}

您可以在此处找到使用Google数据存储区的PHP包装器的几个示例: https://github.com/GoogleCloudPlatform/getting-started-php/blob/master/2-structured-data/src/DataModel/Datastore.php