e-frank/yii2-data
最新稳定版本:1.2.0
Composer 安装命令:
composer require e-frank/yii2-data
包简介
Helpers for persisting relational data from arrays
README 文档
README
Hierarchical hydrator for ActiveRecord with support for relations and sorting.
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!
incremental => false(default) unlinks all orderItems except the ones passed in$data.- additionally to unlink,
delete => truealso deletes these models. it has no effect onincremental => true - 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.
| 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 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
- The
ActiveDocumenthelper class just attaches theActiveDocumentBehaviorto an ActiveRecord - For each relation, the
RelationValidatoris attached. This allows capturing the relation's setter (when loading) - Now
$model->load($data)also cares about relations. - On before save, a transaction is opened
- If everything is valid (ignoring those models, who skipError), we can finally save
CommitorRollbackthe transaction- use
$model->getErrorDocument()and$model->getDocument()
统计信息
- 总下载量: 146
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2014-12-12