【问题标题】:How to look up an entity from Google Cloud Datastore that has numeric value key in PHP?如何从 Google Cloud Datastore 中查找在 PHP 中具有数值键的实体?
【发布时间】:2023-04-10 09:25:02
【问题描述】:

以下代码在 Google App Engine Flex 环境中运行。

例如:键是Key(Task,"t12")。我可以使用以下语法在 PHP 中查找它:

$key = $datastore->key('Task', "t12");
$task = $datastore->lookup($key);

但是,如果键是Key(Task, 12)。我无法用语法查找它:

$key = $datastore->key('Task', 12);
$task = $datastore->lookup($key);

甚至

$key = $datastore->key('Task', intval("12"));
$task = $datastore->lookup($key);

我再次尝试了查询,它对第一个实体(在代码中创建)运行良好。但是,对于以下 3 个实体(使用控制台创建),只有最后一个实体有效。我在第一列中发现了不同之处。

【问题讨论】:

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


    【解决方案1】:

    根据官方文档

    分配标识符 除了种类之外,每个实体都有一个 标识符,在创建实体时分配。因为它是一部分 实体的密钥,标识符与 实体,不能更改。它可以分配在两个中的任何一个 方式:

    1.您的应用程序可以为实体指定自己的键名字符串。

    2.您可以让 Firestore 在 Datastore 模式下自动为实体分配一个整数数字 ID。

    3.分配您自己的整数数字ID

    因此,我使用了案例 3​​,而您使用了案例 1。在案例 1 中,您应该搜索一个字符串,因为您在使用控制台插入时设置了一个键名,它是字符串类型。当我使用客户端库插入一个条目时,我使用了我自己的数字 ID,它是 int 类型的。

    name=12 和 name="12" 是两个不相同的字符串

    【讨论】:

    • 感谢您的回答,但我已经找到了真正的问题。当我在代码中创建实体时(就像您所做的那样),键列是 id=33。但是,当我在控制台上创建一个实体时,它是 name=12(请参阅编辑后的帖子)。在第一种情况下查找实体时,它工作得很好,但在我的情况下,它只有在键的值具有字符时才有效。我是这项技术的新手,所以我真的不知道 key 的 name 和 id 有什么不同。
    • 你能告诉我如何搜索案例 name=12 和 name="12"。我试过:``` $key = $datastore->key('Task', strval("12")); $task = $datastore->lookup($key); ``` 和 ``` $key = $datastore->key('Task', strval(12)); $task = $datastore->lookup($key); ``` 两者都不适合我。
    • 这个名字好像不只接受int值,我也搜不到
    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2021-06-29
    • 2021-04-05
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多