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