deadmantfa / yii2-relation-trait
Yii 2 Models load with relation & transaction save with relation (plus optional soft-delete/restore).
Installs: 67
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 45
Open Issues: 0
Type:yii2-extension
Requires
- php: >=7.4.0
- yiisoft/yii2: ^2.0.51
README
Note: This is not the official extension by @mootensai.
I am not the creator of the original extension. I have made bug fixes and improvements that suit my use case.
Feel free to use it or refer to the official package at mootensai/yii2-relation-trait.
Yii 2 Models add functionality for loading related models via loadAll($POST)
and transactional saving via
saveAll()
.
It also supports soft delete and soft restore features.
Works best with mootensai/yii2-enhanced-gii.
Badges
Installation
The preferred way to install this extension is through Composer.
Either run
composer require deadmantfa/yii2-relation-trait
or add
"deadmantfa/yii2-relation-trait": "^2.0.0"
to the require section of your application's composer.json
file.
Usage in the Model
use deadmantfa\relation\RelationTrait; class MyModel extends \yii\db\ActiveRecord { use RelationTrait; // ... }
Controller Usage
The extension expects a normal array of POST data. For example:
[ $_POST['ParentClass'] => [ 'attr1' => 'value1', 'attr2' => 'value2', // Has many 'relationName' => [ [ 'relAttr' => 'relValue1' ], [ 'relAttr' => 'relValue2' ] ], // Has one 'relationName' => [ 'relAttr1' => 'relValue1', 'relAttr2' => 'relValue2' ] ] ];
In your controller:
$model = new ParentClass(); if ($model->loadAll(Yii::$app->request->post()) && $model->saveAll()) { return $this->redirect(['view', 'id' => $model->id]); }
Features
- Transaction Support a. Your data changes are atomic (ACID compliant).
- Normal
save()
a. Behaviors still work as usual since it’s built on top of Yii’sActiveRecord
. - Validation
a. Errors from related models appear via
errorSummary()
, e.g.MyRelatedClass #2: [Error message]
- UUID or Auto-Increment Works with any PK strategy, including mootensai/yii2-uuid-behavior.
- Soft Delete
By defining
$_rt_softdelete
in your model constructor (and$_rt_softrestore
for restoring), you can softly mark rows as deleted instead of physically removing them.private $_rt_softdelete; private $_rt_softrestore; public function __construct($config = []) { parent::__construct($config); $this->_rt_softdelete = [ 'is_deleted' => 1, 'deleted_by' => Yii::$app->user->id, 'deleted_at' => date('Y-m-d H:i:s'), ]; $this->_rt_softrestore = [ 'is_deleted' => 0, 'deleted_by' => null, 'deleted_at' => null, ]; }
Array Outputs
print_r($model->getAttributesWithRelatedAsPost());
Produces a POST-like structure with the main model and related arrays.
print_r($model->getAttributesWithRelated());
Produces a nested structure under [relationName] => [...]
.
Contributing or Reporting Issues
Please open an issue or submit a PR if you find a bug or have an improvement idea.
Disclaimer
This package is a fork or an alternative to mootensai/yii2-relation-trait. All credit to @mootensai for the initial code. This is not meant to replace the original package but rather provide bug fixes and enhancements under a different namespace.