mootensai / yii2-relation-trait
Yii 2 Models load with relation, & transaction save with relation
Installs: 185 063
Dependents: 10
Suggesters: 0
Security: 0
Stars: 47
Watchers: 10
Forks: 45
Open Issues: 19
Type:yii2-extension
Requires
- php: >=5.4.0
- yiisoft/yii2: ~2.0
README
Yii 2 Models add functionality for load with relation (loadAll($POST)), & transactional save with relation (saveAll())
PLUS soft delete/restore feature!
Best work with mootensai/yii2-enhanced-gii
Support
https://www.paypal.me/yohanesc
Endorse me on LinkedIn
https://www.linkedin.com/in/yohanes-candrajaya-b68394102/
Installation
The preferred way to install this extension is through composer.
Either run
$ composer require 'mootensai/yii2-relation-trait:dev-master'
or add
"mootensai/yii2-relation-trait": "*"
to the require
section of your composer.json
file.
Usage At Model
class MyModel extends ActiveRecord{ use \mootensai\relation\RelationTrait; }
Array Input & Usage At Controller
It takes a normal array of POST. This is the example
Array ( $_POST['ParentClass'] => Array ( [attr1] => value1 [attr2] => value2 // has many [relationName] => Array ( [0] => Array ( [relAttr] => relValue1 ) [1] => Array ( [relAttr] => relValue1 ) ) // has one [relationName] => Array ( [relAttr1] => relValue1 [relAttr2] => relValue2 ) ) ) OR Array ( $_POST['ParentClass'] => ['attr1' => 'value1','attr2' => 'value2'], // Has One $_POST['RelatedClass'] => ['relAttr1' => 'value1','relAttr2' => 'value2'], // Has Many $_POST['RelatedClass'] => Array ( [0] => Array ( [attr1] => value1 [attr2] => value2 ) [1] => Array ( [attr1] => value1 [attr2] => value2 ) ) )
// sample at controller if($model->loadAll(Yii:$app->request->post()) && $model->saveAll()){ return $this->redirect(['view', 'id' => $model->id, 'created' => $model->created]); }
Features
Array Output
// I use this to send model & related through JSON / Serialize print_r($model->getAttributesWithRelatedAsPost());
Array
(
[MainClass] => Array
(
[attr1] => value1
[attr2] => value2
)
[RelatedClass] => Array
(
[0] => Array
(
[attr1] => value1
[attr2] => value2
)
)
)
print_r($model->getAttributesWithRelated());
Array
(
[attr1] => value1
[attr2] => value2
[relationName] => Array
(
[0] => Array
(
[attr1] => value1
[attr2] => value2
)
)
)
Use Transaction
So your data will be atomic (see : http://en.wikipedia.org/wiki/ACID)
Use Normal Save
So your behaviors still works
Add Validation At Main Model
$form->errorSummary($model);
will give you
<<Related Class Name>> #<<index + 1>> : <<error message>>
My Related Model #1 : Attribute is required
It Works On Auto Incremental PK Or Not (I Have Tried Use UUID)
See here if you want to use my behavior :
https://github.com/mootensai/yii2-uuid-behavior
Soft Delete
Add this line to your Model to enable soft delete
private $_rt_softdelete; function __construct(){ $this->_rt_softdelete = [ '<column>' => <undeleted row marker value> // multiple row marker column example 'isdeleted' => 1, 'deleted_by' => \Yii::$app->user->id, 'deleted_at' => date('Y-m-d H:i:s') ]; }
Add this line to your Model to enable soft restore
private $_rt_softrestore; function __construct(){ $this->_rt_softrestore = [ '<column>' => <undeleted row marker value> // multiple row marker column example 'isdeleted' => 0, 'deleted_by' => 0, 'deleted_at' => 'NULL' ]; }
Should work on Yii's supported DB
It use all Yii's Active Query or Active Record to execute DB command
I'm open for any improvement
Please create issue if you got a problem or an idea for enhancement