Skip to content

yiisoft/data-db

Yii

Yii Data DB


Latest Stable Version Total Downloads Code Coverage Mutation testing badge Static analysis type-coverage psalm-level

The package provides data reader implementation based on Yii DB query and a set of DB-specific filters.

Detailed build statuses:

RDBMS Status
SQLite SQLite status
MySQL MySQL status
PostgreSQL PostgreSQL status
Microsoft SQL Server Microsoft SQL Server status
Oracle Oracle status

Requirements

  • PHP 8.1 - 8.5.

Installation

The package could be installed with Composer:

composer require yiisoft/data-db

General usage

The QueryDataReader wraps a database query to provide a flexible data reading interface:

use Yiisoft\Data\Db\QueryDataReader;
use Yiisoft\Data\Reader\Filter\Equals;
use Yiisoft\Data\Reader\Filter\GreaterThan;
use Yiisoft\Data\Reader\Filter\Like;
use Yiisoft\Data\Reader\Filter\AndX;
use Yiisoft\Data\Reader\Sort;
use Yiisoft\Db\Query\Query;

$query = (new Query($db))->from('customer');
$dataReader = new QueryDataReader($query);

// Iterate through results
foreach ($dataReader->read() as $customer) {
    // ... process each customer ...
}

// Read a single record
$customer = $dataReader->readOne();

// Get total count
$total = $dataReader->count();

// Sorting
$sort = Sort::any(['name', 'email'])->withOrderString('-name,email');
$dataReader = $dataReader->withSort($sort);

// Filtering
$filter = new AndX(
    new Equals('status', 'active'),
    new GreaterThan('age', 18),
    new Like('name', 'John')
);
$dataReader = $dataReader->withFilter($filter);

// Pagination
$dataReader = $dataReader
    ->withOffset(20)
    ->withLimit(10);

Field mapping

Map data reader field names to database columns:

use Yiisoft\Data\Db\QueryDataReader;
use Yiisoft\Data\Reader\Filter\Equals;

$dataReader = new QueryDataReader(
    query: $query,
    fieldMapper: [
        'userName' => 'user_name',
        'createdAt' => 'created_at',
    ]
);

// Now you can filter and sort by 'userName' and it will use 'user_name' column
$filter = new Equals('userName', 'admin');

Batch processing

Process large datasets in batches to reduce memory usage:

use Yiisoft\Data\Db\QueryDataReader;

$dataReader = new QueryDataReader($query);
$dataReader = $dataReader->withBatchSize(100);

foreach ($dataReader->read() as $item) {
    // Items are fetched in batches of 100
}

Documentation

If you need help or have a question, the Yii Forum is a good place for that. You may also check out other Yii Community Resources.

License

The Yii Data DB is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Yii Software.

Support the project

Open Collective

Follow updates

Official website Twitter Telegram Facebook Slack

About

Database adapter for data interfaces

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Contributors 12