mootensai / yii2-before-query
Add before query or before find event on Yii 2 models
dev-master / 1.0.x-dev
2015-06-29 05:14 UTC
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-12-21 18:48:11 UTC
README
Add before query event on Yii 2 models
Installation
The preferred way to install this extension is through composer.
Either run
$ composer require mootensai/yii2-before-query "dev-master"
or add
"mootensai/yii2-before-query": "dev-master"
to the require
section of your composer.json
file.
- Base Trait Before Query
namespace common\traits\base; trait BeforeQueryTrait{ public static function find() { $obj = new static; $class = new \ReflectionClass($obj); $condition = []; foreach ($class->getProperties(\ReflectionProperty::IS_STATIC) as $property) { if(strpos($property->getName(),'BEFORE_QUERY') !== false && is_array($property->getValue($obj))){ $condition = array_merge($condition, $property->getValue($obj)); } } return parent::find()->andFilterWhere($condition); } }
- Add new property on model
Next, you can add new property on your model like this :
class MyClass extends \yii\db\ActiveRecord{ use \common\traits\base\BeforeQueryTrait; public static $BEFORE_QUERY = ['myColumn' => 'myValue']; }
NB : the content of your public static $BEFORE_QUERY
can be learn here
http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where%28%29-detail
- You can create a new trait.
For example, i've created Soft Delete Boolean Trait :
trait SoftDeleteBoolTrait{ public static $BEFORE_QUERY_SOFT_DELETE = ['isdeleted' => 0]; public function deleteSoft() { $col = key(static::$BEFORE_QUERY_SOFT_DELETE); $this->{$col} = 1; return $this->save(false,[$col]); } public static function restore($id) { $col = key(static::$BEFORE_QUERY_SOFT_DELETE); $model = parent::findOne($id, 1); $model->{$col} = 0; $model->save(false,[$col]); } }
Use it on model :
class MyClass extends \yii\db\ActiveRecord{ use \mootensai\beforequery\base\BeforeQueryTrait; use \mootensai\beforequery\traits\SoftDeleteBoolTrait; }