dev-master
9999999-devHelpers for persisting relational data from arrays
BSD-3-Clause
The Requires
- php >=5.4.0
- yiisoft/yii2 ~2.0.6
by Elmar Frank
yii activerecord relations hierarchical
Wallogit.com
2017 © Pedro Peláez
Helpers for persisting relational data from arrays
Hierarchical hydrator for ActiveRecord with support for relations and sorting., (*1)
$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!
incremental => false (default) unlinks all orderItems except the ones passed in $data.delete => true also deletes these models. it has no effect on incremental => true
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., (*2)
| option | value | description |
|---|---|---|
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 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'],
]
]
]
ActiveDocument helper class just attaches the ActiveDocumentBehavior to an ActiveRecordRelationValidator is attached. This allows capturing the relation's setter (when loading)$model->load($data) also cares about relations.Commit or Rollback the transaction$model->getErrorDocument() and $model->getDocument()
Helpers for persisting relational data from arrays
BSD-3-Clause
yii activerecord relations hierarchical