Kam*_*aul 5 php pagination amazon-dynamodb
有人对从表中分页记录有任何想法。其实我想用DynamoDb在php中创建一个分页组件。
似乎不可能像 <first> <prev> 1,2,3, 4 ,5... <next> <last>这样的分页。
因为 Dyanmodb 只是为我们提供了 LIMIT 子句,我们可以通过它来读取某些不。记录,我们可以通过 LastEvaluatedKey 处理接下来的 n 条记录。所以如果我想直接跳到第 5 页,怎么可能?
根据我的理解,我们无法在分页中显示页码。我们能做的就是读取一定限制的记录并提供 NEXT 链接来检索下 n 条记录。
分页是任何 Web 应用程序的基本功能,如果迁移到 DynamoDb 等云数据库,我们如何实现?
请提供您的意见和建议。谢谢
OFFSET是的,你是对的, DynamoDB 中没有。但仅使用Limit和LastEvaluatedKey,我做了这个功能:
public function scan($table, $filter = [], $select = null, $limit = 2)
{
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$options = [
'TableName' => $table,
'Count' => true,
];
if (!empty($limit)) {
$options['Limit'] = $limit;
}
if (!is_null($select)) {
$options['Select'] = $select;
}
if (!empty($filter)) {
$options['ScanFilter'] = $filter;
}
$results = $results = $this->_client->scan($options);
while ($page > 0 && isset($results['LastEvaluatedKey'])) {
$results = $results = $this->_client->scan($options);
$options['ExclusiveStartKey'] = $results['LastEvaluatedKey'];
$page--;
}
return $results;
}
Run Code Online (Sandbox Code Playgroud)
$this->_client指 DynamoDb 客户端对象。
基本上我循环遍历所有条目,LastEvaluatedKey直到到达所需的页面。
要获取表中的总条目,请调用$this->scan($this->tableName(), [], null, null)['Count'];(即 - 没有任何搜索条件并且没有分页,就像在正常分页函数中一样)。