PHPackages                             dromru/iterable-dbal - 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. dromru/iterable-dbal

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

dromru/iterable-dbal
====================

Набор классов для разбиения пакетных sql-запросов на раздельные.

v2.0.0(3y ago)411.6k↓33.3%MITPHPPHP &gt;=7.4

Since Mar 25Pushed 3y ago4 watchersCompare

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

READMEChangelogDependencies (7)Versions (7)Used By (0)

iterable-dbal
=============

[](#iterable-dbal)

[![Latest Stable Version](https://camo.githubusercontent.com/cfd13f88ef1cc0c2e2d253b081d5c289482df544448075a6a22a01a370b580ac/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f64726f6d72752f6974657261626c652d6462616c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/dromru/iterable-dbal)[![Tests](https://github.com/dromru/iterable-dbal/workflows/Tests/badge.svg)](https://github.com/dromru/iterable-dbal/actions)[![Coverage Status](https://camo.githubusercontent.com/eba51ae1f13dbc58866c66fb9cc3ba049add6a5e40bd6bb0aa71cbb4f275c679/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f64726f6d72752f6974657261626c652d6462616c2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/dromru/iterable-dbal?branch=master)[![Minimum PHP Version](https://camo.githubusercontent.com/eb773fa94283cbea6c7b192d460983a781ae4a16409af56d109fe3e8e71ab6c9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230372e342d3838393242462e7376673f7374796c653d666c61742d737175617265)](https://php.net/)

Проблема
--------

[](#проблема)

Зачастую код получения данных пачками из БД перемешивается с логикой обработки этих данных. Такой код часто дублируется и усложняет поддержку.

Решение
-------

[](#решение)

`iterable-dbal` - пакет, который предоставляет набор классов для разбиения пакетных sql-запросов на раздельные. Приспособлен для использования в связке с [doctrine/dbal](https://github.com/doctrine/dbal).

P.S. Реализован с использованием генераторов.

Примеры использования
---------------------

[](#примеры-использования)

Допустим необходимо итерировать по существующим записям в БД с идентификаторами в промежутке от 1 до 1 000 000 000. Когда весь 1 000 000 000 из БД в память не влезает (жирный запрос), можно использовать `\Drom\IterableUtils\Dbal\BatchedMinMaxQueryIterator` для того чтобы выполнить N облегчённых запросов - эта логика скрыта внутри итератора.

```
/**
 * @var \Doctrine\DBAL\Connection $connection
 */
$iterator = new \Drom\IterableUtils\Dbal\BatchedMinMaxQueryIterator(
    $batchSize = 1000,
    \Closure::fromCallable([$connection, 'fetchFirstColumn']),
     1,
        'maxId' => 1_000_000_000,
        'field1' => [1, 2, 3],
    ],
    [
        'minId' => \Doctrine\DBAL\ParameterType::INTEGER,
        'maxId' => \Doctrine\DBAL\ParameterType::INTEGER,
        'field1' => \Doctrine\DBAL\Connection::PARAM_INT_ARRAY,
    ]
);

foreach ($iterator as $id) {
    echo PHP_EOL . $id;
}
```

Если требуется итерировать по существующей коллекции идентификаторов, но необходимо получать набор связанных данных, то можно использовать `\Drom\IterableUtils\Dbal\BatchedIdsQueryIterator` для того чтобы выполнить N облегчённых запросов.

```
$ids = [1, 2, /* ... */, 1_000_000_000];

/**
 * @var \Doctrine\DBAL\Connection $connection
 */
$iterator = new \Drom\IterableUtils\Dbal\BatchedIdsQueryIterator(
    $batchSize = 1000,
    \Closure::fromCallable([$connection, 'fetchAllAssociative']),
     $ids,
        'param1' => 1,
    ],
    [
        'ids' => \Doctrine\DBAL\Connection::PARAM_INT_ARRAY,
        'param1' => \Doctrine\DBAL\ParameterType::INTEGER,
    ]
);

foreach ($iterator as $item) {
    echo PHP_EOL;
    print_r($item);
    echo PHP_EOL;
}
```

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity29

Limited adoption so far

Community5

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

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 ~60 days

Recently: every ~76 days

Total

6

Last Release

1212d ago

Major Versions

v1.0.4 → v2.0.02023-01-23

### Community

Maintainers

![](https://www.gravatar.com/avatar/7829b5718494f0f56b33328e6d289a7b52c4acf0fe572498bcbad47728a774b7?d=identicon)[los-romka](/maintainers/los-romka)

---

Tags

phpdbaliterable

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/dromru-iterable-dbal/health.svg)

```
[![Health](https://phpackages.com/badges/dromru-iterable-dbal/health.svg)](https://phpackages.com/packages/dromru-iterable-dbal)
```

###  Alternatives

[weirdan/doctrine-psalm-plugin

Stubs to let Psalm understand Doctrine better

876.9M50](/packages/weirdan-doctrine-psalm-plugin)[jawira/db-draw

📐 Takes a DoctrineORM connection and generates a database diagram in .puml format

2295.1k2](/packages/jawira-db-draw)[simple-swoole/db

A db component for Simps.

216.3k3](/packages/simple-swoole-db)

PHPackages © 2026

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