Search by

mheads / yii2-data-db

alse0017

Adapter for using Yii2 DB queries as yiisoft/data readers.

Package info

github.com/mheads-dev/yii2-data-db

pkg:composer/mheads/yii2-data-db

Statistics

Installs: 6

Dependents: 1

Suggesters: 1

Stars: 0

Open Issues: 0

1.0.0 2026-09-17 08:58 UTC

This package is auto-updated.

Last update: 2026-09-17 09:03:48 UTC


README

Adapter for using yii\db\QueryInterface as a yiisoft/data data reader.

Russian documentation: README.ru.md.

Yii2 Query / ActiveQuery -> Yiisoft\Data\Reader\DataReaderInterface

Installation

composer require mheads/yii2-data-db

Usage

use Mheads\Yii2DataDb\QueryDataReader;
use yii\db\Query;
use Yiisoft\Data\Reader\Filter\Equals;
use Yiisoft\Data\Reader\Sort;

$reader = new QueryDataReader(
	query: (new Query())->from('product'),
	db: Yii::$app->db,
	sort: Sort::only(['id'])->withOrderString('-id'),
	filter: new Equals('category', 'mobile'),
);

$rows = iterator_to_array($reader->read(), false);
$count = $reader->count();

yii\db\ActiveQuery is supported too:

$reader = new QueryDataReader(
	query: Product::find(),
);

Included

  • QueryDataReader - data reader for Yii2 queries.
  • QueryDataReaderInterface - data reader contract.
  • QueryFilterCompiler - converts yiisoft/data filters into Yii2 conditions.
  • ConditionFilter - existing Yii2 condition as FilterInterface.

QueryDataReader supports filtering, sorting, limit, offset, count, HAVING, and batched reading.

Field Map

Use fieldMap when public field names differ from SQL field names:

$reader = new QueryDataReader(
	query: $query,
	db: Yii::$app->db,
	fieldMap: [
		'createdAt' => 'created_at',
		'total' => new yii\db\Expression('COUNT(*)'),
	],
);

Raw Condition

use Mheads\Yii2DataDb\ConditionFilter;

$reader = $reader->withFilter(
	new ConditionFilter(['or', ['status' => 'new'], ['status' => 'paid']]),
);