laxity7 / yii2-json-field
在模型中保存数据之前将数组转换为JSON的行为,并在保存和检索数据后也将JSON转换为数组
v1.0.2
2023-08-31 22:50 UTC
Requires
- php: ^7.4||^8.0
- ext-json: *
- yiisoft/yii2: 2.0.*
Requires (Dev)
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2024-08-30 01:11:40 UTC
README
此行为为Yii2活动记录模型中处理JSON数据提供了高级支持。行为在模型中保存数据之前将数组转换为JSON,并在保存和检索数据后也将JSON转换为数组。可以使用数组或对象作为正常字段使用JSON字段。
安装
通过composer安装
composer require laxity7/yii2-json-field
如何使用
要使用JsonFieldBehavior,将以下代码插入到您的ActiveRecord类中
/** @inheritdoc */ public function behaviors(): array { return [ [ 'class' => \laxity7\yii2\behaviors\JsonFieldBehavior::class, 'fields' => ['foo_data', 'bar_data'], ], ]; }
您还可以传递以下参数
- jsonOptions
int
(默认为JSON_UNESCAPED_UNICODE
) JSON常量可以组合形成json_encode()的选项。 - defaultValue
array|string
(默认为'[]'
) 属性的默认值。如果字段值为空,则默认值将存储在数据库中。如果[[skipEmpty]]被启用,则忽略。 - skipEmpty
bool
(默认为true
) 是否跳过空字段。当为TRUE时,数据库中的字段可以是null,当为FALSE时将保存空对象('[]'或查看defaultValue) - asArray
bool
(默认为true
) 解码JSON为数组或对象。
因此,完整的设置列表将如下所示
use laxity7\yii2\behaviors\JsonFieldBehavior; use yii\db\ActiveRecord; /** * @property int $id * @property array $foo_data * @property array $bar_data */ class Foo extends ActiveRecord { /** @inheritdoc */ public function behaviors(): array { return [ [ 'class' => JsonFieldBehavior::class, 'fields' => ['foo_data', 'bar_data'], 'jsonOptions' => JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, 'skipEmpty' => false, 'defaultValue' => ['foo' => 'bar'], 'asArray' => true, ], ]; } // Based on these parameters may be approximately the code public function updateBar(int $id, array $barData): array { $model = self::findOne(['id' => $id]); $model->foo_data['foo'] = 'bar1'; $model->bar_data['bar'] = array_merge($model->bar_data['bar'], $barData); $model->save(); return $model->bar_data['bar']; } }