PHPackages                             e-frank/yii2-data - 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. e-frank/yii2-data

ActiveYii2-extension[Database &amp; ORM](/categories/database)

e-frank/yii2-data
=================

Helpers for persisting relational data from arrays

1.2.0(7y ago)51463BSD-3-ClausePHPPHP &gt;=5.4.0

Since Dec 17Pushed 7y ago3 watchersCompare

[ Source](https://github.com/e-frank/yii2-data)[ Packagist](https://packagist.org/packages/e-frank/yii2-data)[ RSS](/packages/e-frank-yii2-data/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (1)Versions (2)Used By (0)

yii2-data
=========

[](#yii2-data)

Hierarchical hydrator for ActiveRecord with support for relations and sorting.

---

Usage
-----

[](#usage)

```
$document = new \x1\data\ActiveDocument([
    'model'     => Order::className(),

    // 'useTransaction'     => true,
    // 'defaultIncremental' => false,
    // 'defaultIgnoreError' => false,
    // 'defaultDelete'      => true,
    // 'defaultScenario'    => null,
    // 'defaultSkipUpdate'  => false,
    // 'defaultIgnoreError' => false,

    'relations' => [
        'orderItems' => [
            // 'incremental' => false,   // sets relations as passed by data and unlinks omitted rows
            // 'skipUpdate'  => false,   // models are save, otherwise they are skipped
            // 'delete'      => true,    // deletes dropped models, otherwise they are only unlinked
            // 'scenario'    => null,	 // the scenario to use for validation
            // 'useTransaction' => true, // wraps all operations in a transaction
            // 'sortable' => null,       // (string) name of the order column (=int field)
            'relations' => ['supplier'], // other relations of 'orderItem', maybe nested
        ]
    ],
]);

$model = $document->findOne(1); // find the model and quietly attach ActiveDocumentBehavior
$model->load($data);		// relations are set!
```

1. `incremental => false` (default) unlinks all orderItems except the ones passed in `$data`.
2. additionally to unlink, `delete => true` also deletes these models. it has no effect on `incremental => true`
3. if relation configuration values are not explicitly set, the default values at root level are used

pass all needed relations to the configurations array. you can customize the processing of related data as shown below, like link/unlink and delete/skip behavior.

optionvaluedescription`incremental``true`updates and creates, but does not remove omitted models`false`sets the relation's models only to the ones passed by load(), all others are removed`delete``true`models missing in the relation are unlinked and **deleted**`delete``false`models missing in the relation are unlinked---

Data Example
------------

[](#data-example)

```
// data from post
$data = [
	'Order' => [
		'id' 	=> 1,
		'title'	=> 'Order #1'
		'orderItems' => [
			['id' => 1, 'msg' => 'order item #1'],
			['id' => 2, 'msg' => 'order item #2'],
			[           'msg' => 'unsaved order item #3'],
		]
	]
]
```

Behind the scene
----------------

[](#behind-the-scene)

1. The `ActiveDocument` helper class just attaches the `ActiveDocumentBehavior` to an ActiveRecord
2. For each relation, the `RelationValidator` is attached. This allows capturing the relation's setter (when loading)
3. Now `$model->load($data)` also cares about relations.
4. On before save, a transaction is opened
5. If everything is valid (ignoring those models, who skipError), we can finally save
6. `Commit` or `Rollback` the transaction
7. use `$model->getErrorDocument()` and `$model->getDocument()`

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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

Unknown

Total

1

Last Release

2701d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c29aab9834b75ceaba0720f3a681d257b4d0b9d0461ffba599f8e4d5a628c83b?d=identicon)[eFrank](/maintainers/eFrank)

---

Top Contributors

[![e-frank](https://avatars.githubusercontent.com/u/7667085?v=4)](https://github.com/e-frank "e-frank (35 commits)")

---

Tags

yiiactiverecordrelationshierarchical

### Embed Badge

![Health badge](/badges/e-frank-yii2-data/health.svg)

```
[![Health](https://phpackages.com/badges/e-frank-yii2-data/health.svg)](https://phpackages.com/packages/e-frank-yii2-data)
```

###  Alternatives

[voskobovich/yii2-linker-behavior

This behavior makes it easy to maintain many-to-many and one-to-many relations in your ActiveRecord models.

80319.0k9](/packages/voskobovich-yii2-linker-behavior)[nhkey/yii2-activerecord-history

Storage history of changes to ActiveRecord

46143.4k1](/packages/nhkey-yii2-activerecord-history)[sjaakp/yii2-sortable-behavior

Sort ActiveRecords and related records in Yii2.

36144.7k](/packages/sjaakp-yii2-sortable-behavior)[sjaakp/yii2-spatial

Yii2 ActiveRecord supporting MySQL spatial data

1873.8k1](/packages/sjaakp-yii2-spatial)[spinitron/yii2-dynamic-ar

Extends Yii ActiveRecord for Maria Dynamic Columns

576.8k](/packages/spinitron-yii2-dynamic-ar)[nanson/yii2-postgis

Yii2-extension to work with postgis data

1851.6k](/packages/nanson-yii2-postgis)

PHPackages © 2026

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