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
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