【发布时间】:2023-03-08 09:18:01
【问题描述】:
在 web 使用 firebase 时,我可以将“value”和“key”用于“startAt”方法,如下所示:
https://stackoverflow.com/a/38024909/3466502
并记录在这里:
https://firebase.google.com/docs/reference/js/firebase.database.Reference?hl=pt-br#startAt
但我在 REST 使用中需要此功能,但我没有找到任何参考我应该如何做到这一点。
有人知道怎么做吗?
我正在使用 Firebase 推荐的 PHP 包,但在他们的文档中我无法获得有关如何执行此操作的信息...:(
我有这样的数据结构:
"list": {
"-KsaZNyjd91tEAKjDffA": {"name": "a", "age" => 20},
"-KsaZNynhTFuDBLpdmKv": {"name": "b", "age" => 21},
"-KsaZNyoAoYAfHl-f6KF": {"name": "b", "age" => 22},
"-KsaZiL4HJcoCYksHBEn": {"name": "b", "age" => 23},
...
}
我需要每页动态返回两个项目。在 JavaScript 中这样做很容易:
var list = firebase.database().ref("list").orderByChild("name").limitToFirst(2);
var page_1 = $firebaseArray(list);
var page_2 = $firebaseArray(list.startAt('b', '-KsaZNyoAoYAfHl-f6KF'));
使用 REST 我创建了以下代码:
$list = $db->getReference('list')->orderByChild('name')->limitToFirst(2);
$page_1 = $list->getValue();
$page_2 = $list->startAt('b', '-KsaZNyoAoYAfHl-f6KF')->getValue();
// /
// "key" does not work in this method--/
但是包的“startAt”方法不允许我将“key”确定为第二个参数,因此第二页的内容不是预期的。
第 1 页
{"name": "a", "age" => 20},
{"name": "b", "age" => 21}
第 2 页
{"name": "b", "age" => 21}, // <--- This is the last one on page one
{"name": "b", "age" => 22} // <--- This should be the first on page 2
我查看了 PHP 包方法,它并没有真正为“密钥”实现任何东西。 https://firebase-php.readthedocs.io/en/latest/realtime-database.html#startat
public function startAt($value): Query
{
return $this->withAddedFilter(new Filter\StartAt($value));
}
所以我查看了 REST 请求的 firebase 文档,但我也无法确定应该指定哪个参数作为查询的“键”。 https://firebase.google.com/docs/database/rest/retrieve-data#consultas-de-intervalo
【问题讨论】:
-
REST API 支持相同的运算符:
startAt、endAt等。它们记录在这里:firebase.google.com/docs/database/rest/…。如果您在使它们工作时遇到问题,请显示minimal code that reproduces where you are stuck。 -
谢谢@FrankVanPuffelen。我正在阅读此文档页面,但仍然找不到我的问题的解决方案。我添加了更多信息,试图更好地解释我被困在哪里。
标签: rest firebase firebase-realtime-database pagination