【问题标题】:How can I obtain key of a datastore Entity如何获取数据存储实体的密钥
【发布时间】:2017-09-13 15:51:32
【问题描述】:

我采用了如下所示的数据存储实体。

$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,... 如果我有一个或多个实体。 我的 Datastore 实体是这样的:

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*/
}

【问题讨论】:

  • ->key() 方法是正确的,请参阅github.com/GoogleCloudPlatform/google-cloud-php-datastore/blob/…。其他事情正在发生。
  • 好的,但是为什么如果我执行“SELECT * FROM X where User = 'Test@test.com' AND Password = 'xxxxxxxx'”这样的查询,我希望键值为 5659118702428160 但如果我打印出 Entity->Key() value is 1?
  • 键不是普通值,它们是键类型和键 ID 对的列表。密钥 ID 可能是您提到的整数。我不知道 PHP,所以我不知道你到底在打印什么,或者为什么会这样。检查cloud.google.com/datastore/docs/concepts/…,这些是关键。不是普通整数
  • @DanCornilescu 感谢您的回复,但您指出的链接似乎是使用“外键”操作的方法
  • 不是真的 - 那种对象是 ->key() 返回的...

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


【解决方案1】:

其实有一个办法,Google Datastore为key对象提供了一个函数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

【讨论】:

    【解决方案2】:

    正如 Google 所说,“如果您想向用户显示实体 ID,和/或取决于他们的顺序,最好的办法是使用手动分配。”我为我的实体使用了自定义 ID,并且运行良好.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多