From 1536c586d2c16e340e4e88324e47e0564ea1e5ef Mon Sep 17 00:00:00 2001 From: LIERLIER <1113093541@qq.com> Date: Thu, 17 Aug 2023 17:11:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99fields()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 8820d54..671b1d0 100644 --- a/readme.md +++ b/readme.md @@ -10,7 +10,7 @@ namespace {yourApp}\behaviors; use yii\base\Behavior; use yii\db\ActiveRecord; -use yii\db\Expression; +use yii\helpers\ArrayHelper; class BitFlagBehavior extends Behavior { @@ -28,12 +28,32 @@ class BitFlagBehavior extends Behavior public function events() { return [ + ActiveRecord::EVENT_INIT => 'eventInit', ActiveRecord::EVENT_BEFORE_INSERT => 'beforeSave', ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeUpdate', ActiveRecord::EVENT_AFTER_FIND => 'afterFind', + ActiveRecord::EVENT_AFTER_REFRESH => 'afterFind', ]; } + public function eventInit() + { + $this->addFlagFieldsToOwner(); + } + + /** + * 添加自定义标志属性 + */ + public function addFlagFieldsToOwner() + { + $owner = $this->owner; + $fields = []; + foreach ($owner::BIT_FLAGS as $bigFlag) { + $fields = ArrayHelper::merge($fields, array_combine($bigFlag, $bigFlag)); + } + $owner->_fields = $fields; + } + public function beforeSave() { foreach ($this->bitFlags as $bitFlag => $flags) { @@ -139,7 +159,15 @@ class MyModel extends base\MyModel // ] ]; - // 其他Model代码...... + /** + * @var string[] 自定义标志字段 + */ + public $_fields; + + public function fields() + { + return ArrayHelper::merge(parent::fields(), $this->_fields); + } public function behaviors() { @@ -162,6 +190,8 @@ class MyModel extends base\MyModel $config = ['bitFlags' => self::BIT_FLAGS]; return new MyModelQuery(get_called_class(), $config); } + + // 其他Model代码...... } ```