Вы можете использовать QueryEntitiesOptions для запросов и разбивки на страницы. Как правило, вы можете использовать setTop($top), чтобы выбрать верхние (N) сущности из таблицы, а затем использовать свойство _nextPartitionKey
запроса функции queryEntities()
для следующих (N) объектов.
Вот фрагмент кода:
$tableRestProxy = ServicesBuilder::getInstance()->createTableService($connectionString);
$options = new QueryEntitiesOptions();
$filter = " (redemption_code eq '1001') ";
$options->setFilter($filter);
$options->setTop(100);
try {
$result = $tableRestProxy->queryEntities("Redemptions", $options);
} catch (ServiceException $e) {
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code . ": " . $error_message . "<br />";
}
//query next 100 entities
$nextRowKey = $result->getNextRowKey();
$nextPartitionKey = $result->getNextPartitionKey();
$options->setNextRowKey($nextRowKey);
$options->setNextPartitionKey($nextPartitionKey);
try {
$next_result = $tableRestProxy->queryEntities("Redemptions", $options);
} catch (ServiceException $e) {
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code . ": " . $error_message . "<br />";
}
Update
После серии испытаний, он будет работать как с использованием setFilter
и setTop
в то же время, если строка фильтра не RowKey
, я использовал пользовательский столбец в строке $filter
, он отлично работает. Но когда я использую RowKey
столбец в $filter
и функцию setTop
в то же время, это поднимает вашу проблему.
Я нырнул в исходный код, найти $filter
строка не была установлена в $queryParam
line 1008 of TableRestProxy.php в связи с $filter
строки не соответствует ни условной СЦМ в _buildFilterExpressionRec()
.
Итак, вы можете попытаться использовать QueryStringFilter
instance для установки строки фильтра. Попробуйте следующий код:
use WindowsAzure\Table\Models\Filters\QueryStringFilter;
use WindowsAzure\Table\Models\QueryEntitiesOptions;
$options = new QueryEntitiesOptions();
$filter = new QueryStringFilter("(RowKey eq 'E1591D1')");
$options->setFilter($filter);
$options->setTop(5);
Если я использую SetTop() theh фильтр не может Работа. иначе фильтр работает идеально. –
QueryEntitiesOptions может использовать 'setFilter' и' setTop' в то время, он отлично работает на моей стороне. Не могли бы вы обновить фрагмент кода проблемы, чтобы мы могли воспроизвести вашу проблему? –
'code' $ options = new QueryEntitiesOptions(); $ filter = "(RowKey eq 'E1591D1')"; $ options-> setFilter ($ filter); $ options-> setTop (5); $ tableRestProxy-> queryEntities ("Redemptions", $ options); - Использование этого кода не может работать. 'code' $ filter =" (redemption_code eq '1001') "; $ result = $ tableRestProxy-> queryEntities ("Redemptions", $ filter); $ entities = $ result-> getEntities(); - Это работает отлично –