PHPackages                             rollun-com/rollun-datastore - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. rollun-com/rollun-datastore

ActiveLibrary[Database &amp; ORM](/categories/database)

rollun-com/rollun-datastore
===========================

Datastore

11.3.1(3mo ago)010.4k—0%10[18 issues](https://github.com/rollun-lc/rollun-datastore/issues)[3 PRs](https://github.com/rollun-lc/rollun-datastore/pulls)9proprietaryPHPPHP ^8.0CI passing

Since Jan 13Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/rollun-lc/rollun-datastore)[ Packagist](https://packagist.org/packages/rollun-com/rollun-datastore)[ RSS](/packages/rollun-com-rollun-datastore/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (15)Versions (231)Used By (9)

rollun-datastore
================

[](#rollun-datastore)

`rollun-datastore` - это библиотека, которая предоставляет единый интерфейс взаимодействие с любым хранилищем данных на основе [Resource Query Language (RQL)](https://www.sitepen.com/blog/2010/11/02/resource-query-language-a-query-language-for-the-web-nosql/). Существующие реализации: DbTable (для таблицы бд), CsvBase (для csv файлов), HttpClient (для внешнего ресурса через http), Memory (для [RAM](https://en.wikipedia.org/wiki/Random-access_memory)).

- [Документация](docs/index.md)
- Опис історії змін по версіям [CHANGELOG.md](CHANGELOG.md)

Краткая таблица операций
------------------------

[](#краткая-таблица-операций)

ОперацияHTTPRQL (в query)Тело запросаПримечанияЗаголовки и атрибуты запросаОграничения и известные проблемыСоздание записи (create)POSTНетОбъектПри коллизии ID поведение задаёт **overwriteMode**: false — ошибка; true — перезаписать существующую запись. Если PK указан и в `path`, и в `body` — приоритет у `body`.**Опционально** атрибут `overwriteMode`. **Опционально** атрибут `primaryKeyValue`.Если PK нет ни в `body`, ни в `path`, то попытка создания записи все равно произойдет для `DbTable`. Это может вызвать ошибку если PK не `AUTO_INCREMENT`. `overwriteMode` вызывает ошибку уровня deprecated для DbTable и по умолчанию имеет значение `false`Множественное создание (multiCreate)POSTНет**Массив** объектовПакетное создание. Обработчик вызывает `multiCreate` реализации.—DbTable: атомарная транзакция, требуется PK в каждой записи; DataStoreAbstract: последовательные `create()` (не атомарно, ошибки игнорируются); HttpClient: требует поддержку сервера (`X_MULTI_CREATE`).Получение записи (read)GETНет—**Требуется ID (в path).****Требуется** атрибут `primaryKeyValue`—Поиск (query)GETОбязателен——Атрибут `primaryKeyValue` **должен отсутствовать**—Обновление записи (update)PUTНетОбъект**ID обязателен**; если указан и в path, и в body — приоритет у body. **Upsert при `overwriteMode = true`** (создать, если записи нет).**Опционально** атрибут `overwriteMode`. **Опционально** атрибут `primaryKeyValue`.`overwriteMode` вызывает ошибку уровня deprecated для DbTable и по умолчание имеет значение `false`. Согласно стандартам, **частичное** обновление записи должно выполнятся методом `PATCH` - об этом известно.Множественное обновление (multiUpdate)PUTНет**Массив** объектовПакетное обновление. Обработчик вызывает `multiUpdate` реализации.—DbTable: атомарная транзакция, все записи должны существовать, дубли ID запрещены; DataStoreAbstract: последовательные `update()` (не атомарно, ошибки игнорируются); HttpClient: требует поддержку сервера (`X_MULTI_UPDATE`).Обновление по фильтру (queriedUpdate)PATCHОбязателенОбъект**Требуется наличие limit в RQL**; **нельзя** select/groupBy; **без** PK (первичный ключ) в body.Атрибут `primaryKeyValue` **должен отсутствовать**Для `DbTable` обновление по фильтру выполняется с помощью `SELECT FOR UPDATE`.Удаление (delete)DELETEНет—**Требуется ID (в path).****Требуется** атрибут `primaryKeyValue`.Для `DbTable` переданный в запросе PK быть либо типа `integer`, либо `double`, либо `string`.Удаление по фильтру (queriedDelete)В данный момент не реализованоУдаление всех записей (deleteAll)В данный момент не реализованоПолучение метаданных (getIdentifier)HEADНет—Метаданные/хедеры по PK.—Заголовки возвращаются в формате `X_OPE_RATION` и т.д.Загрузить контент в CSV файлеGETМожно—При экспорте **RQL-ограничение limit(...) принудительно снимается обработчиком CSV**, поэтому возвращается **весь** контент датастора.**Требуется** заголовок `download` со значением `csv`В данный момент ситуация с `limit` это баг и о нём известно. Требуемый заголовок также в дальнейшем будет изменен согласно стандартам (`Accept: text/csv`).Refresh (если поддерживается)PATCHНет—Только для датасторов с `RefreshableInterface`.——Пересоздание записи (rewrite)В данный момент не реализованоМножественное пересоздание (multiRewrite)В данный момент не реализовано### Примечания к таблице

[](#примечания-к-таблице)

#### Атрибут **overwriteMode**

[](#атрибут-overwritemode)

Это атрибут запроса (`$request->getAttribute('overwriteMode')`), булев флаг, который middleware `RequestDecoder`устанавливает на основании заголовка `If-Match`. Если заголовок равен `*` (`If-Match: *`) — значение `true`; при любом другом значении или отсутствии заголовка — `false`. Он задает поведение при конфликте/отсутствии записи.

#### **CSV и LIMIT**

[](#csv-и-limit)

При экспорте CSV обработчик принудительно снимает/заменяет клиентский `limit(...)` на «без ограничений», поэтому выгружается всё (это поведение реализовано в CSV-хендлере).

#### Политика fallback для multi\* (DATASTORE\_MULTI\_POLICY)

[](#политика-fallback-для-multi-datastore_multi_policy)

Fallback применяется **только если реализация не поддерживает `multiCreate/multiUpdate`** (или в HttpClient сервер не объявил поддержку через `X_MULTI_CREATE/X_MULTI_UPDATE`).

- `DATASTORE_MULTI_POLICY=strict` (по умолчанию): fallback запрещен, выбрасывается `DataStoreException`.
- `DATASTORE_MULTI_POLICY=soft`: fallback разрешен, выполняется последовательный вызов `create()/update()` для каждого элемента. Ошибки отдельных элементов игнорируются (best-effort), возвращается список успешно обработанных идентификаторов.

Если переменная не задана или содержит любое другое значение — используется `strict`.

#### Атрибут **primaryKeyValue**

[](#атрибут-primarykeyvalue)

Это атрибут запроса (`$request->getAttribute('primaryKeyValue')`), строковый PK записи, который middleware `ResourceResolver`извлекает из роут-параметра `id` или из последнего сегмента пути `/api/datastore/{resourceName}/{id}` (после `rawurldecode(...)`). Если ID не задан — null.

[Расширенный формат таблицы выше](/docs/datastore_methods.md)
-------------------------------------------------------------

[](#расширенный-формат-таблицы-выше)

### Для сторонних клиентов

[](#для-сторонних-клиентов)

В DataStore используется дополненная версия `rawurlencode`. К перечню стандартных символов добавлены следующие преобразования

- `-` =&gt; `%2D`
- `_` =&gt; `%5F`
- `.` =&gt; `%2E`
- `~` =&gt; `%7E`

###  Health Score

59

—

FairBetter than 99% of packages

Maintenance82

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community29

Small or concentrated contributor base

Maturity88

Battle-tested with a long release history

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~17 days

Recently: every ~9 days

Total

190

Last Release

109d ago

Major Versions

6.14.0 → 11.2.12025-10-08

6.14.1 → 11.2.22025-10-16

6.14.2 → 11.2.32025-11-07

6.14.3 → 11.3.02025-12-24

10.7.0 → 11.3.12026-01-29

PHP version history (5 changes)v1.0.0PHP ^5.6 || ^7.0

5.0.0PHP ^7.0

6.0.0PHP ^7.2

6.0.2PHP ^7.1

8.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/a580b0a91b7d5d602f8858c7c747c49542ea14b631dcd976eed93a0d3014a8de?d=identicon)[Andrey Zaboychenko](/maintainers/Andrey%20Zaboychenko)

---

Top Contributors

[![victorynox](https://avatars.githubusercontent.com/u/17138585?v=4)](https://github.com/victorynox "victorynox (266 commits)")[![misha-rollun](https://avatars.githubusercontent.com/u/72918877?v=4)](https://github.com/misha-rollun "misha-rollun (113 commits)")[![orlyk-rollun](https://avatars.githubusercontent.com/u/59170653?v=4)](https://github.com/orlyk-rollun "orlyk-rollun (80 commits)")[![vadymk-rollun](https://avatars.githubusercontent.com/u/194381237?v=4)](https://github.com/vadymk-rollun "vadymk-rollun (42 commits)")[![rollun-com](https://avatars.githubusercontent.com/u/25004261?v=4)](https://github.com/rollun-com "rollun-com (38 commits)")[![Vict0rynox](https://avatars.githubusercontent.com/u/8139419?v=4)](https://github.com/Vict0rynox "Vict0rynox (21 commits)")[![rrollun](https://avatars.githubusercontent.com/u/61580349?v=4)](https://github.com/rrollun "rrollun (18 commits)")[![maria-rollun](https://avatars.githubusercontent.com/u/85940777?v=4)](https://github.com/maria-rollun "maria-rollun (17 commits)")[![rratsun](https://avatars.githubusercontent.com/u/33658723?v=4)](https://github.com/rratsun "rratsun (14 commits)")[![mikola-rollun](https://avatars.githubusercontent.com/u/116670083?v=4)](https://github.com/mikola-rollun "mikola-rollun (6 commits)")[![lazarevrollun](https://avatars.githubusercontent.com/u/133766569?v=4)](https://github.com/lazarevrollun "lazarevrollun (3 commits)")[![lasgrate](https://avatars.githubusercontent.com/u/18899069?v=4)](https://github.com/lasgrate "lasgrate (2 commits)")[![artemka-debug](https://avatars.githubusercontent.com/u/60359843?v=4)](https://github.com/artemka-debug "artemka-debug (1 commits)")[![bryakwork](https://avatars.githubusercontent.com/u/33220958?v=4)](https://github.com/bryakwork "bryakwork (1 commits)")

---

Tags

composer-libraryphp

###  Code Quality

TestsPHPUnit

Static AnalysisRector

### Embed Badge

![Health badge](/badges/rollun-com-rollun-datastore/health.svg)

```
[![Health](https://phpackages.com/badges/rollun-com-rollun-datastore/health.svg)](https://phpackages.com/packages/rollun-com-rollun-datastore)
```

###  Alternatives

[shlinkio/shlink

A self-hosted and PHP-based URL shortener application with CLI and REST interfaces

4.8k4.3k](/packages/shlinkio-shlink)[ssch/typo3-rector

Instant fixes for your TYPO3 PHP code by using Rector.

2592.8M263](/packages/ssch-typo3-rector)[rector/rector-src

Instant Upgrade and Automated Refactoring of any PHP code

134391.5k12](/packages/rector-rector-src)[guikingone/scheduler-bundle

A Symfony bundle that allows to schedule and create repetitive tasks

114217.4k](/packages/guikingone-scheduler-bundle)[samsonasik/error-hero-module

A Hero for your Laminas and Mezzio application to trap php errors &amp; exceptions

5233.4k1](/packages/samsonasik-error-hero-module)[zfc-datagrid/zfc-datagrid

Laminas Module that provides a datagrid for different datasources and output formats

1223.2k](/packages/zfc-datagrid-zfc-datagrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
