1、created_at, updated_at 更新时间和创建时间
- public function behaviors()
- {
- return [
- [
- 'class' => TimestampBehavior::className(),
- 'createdAtAttribute' => 'create_time',// 自己根据数据库字段修改
- 'updatedAtAttribute' => 'update_time', // 自己根据数据库字段修改
- 'value' => time(), // 自己根据数据库字段修改
- ],
- ];
- }
- use yii\behaviors\TimestampBehavior;
- public function behaviors()
- {
- return [
- TimestampBehavior::className(),
- ];
- }
- public function behaviors()
- {
- return [
- [
- 'class' => TimestampBehavior::className(),
- 'updatedAtAttribute' => false
- ]
- ];
- }
2、行为记录
- public function behaviors()
- {
- return [
- TimestampBehavior::className(),
- [
- 'class' => EnewsdologBehavior::className(),
- 'defaultDoing' => '自定义文字[{info.tempname}]'
- ]
- ];
- }
写入的操作日志内容示例如下(acn是username用户名):
acn在2021-03-05 16:13新增招投标项目 [xxxx项目]
acn在2021-03-05 16:16编辑招投标项目 [xxxx项目]
acn在2021-03-05 16:17删除招投标项目 [xxxx项目]
2021-03-05新增附加字段,自定义内容
- public function behaviors()
- {
- return [
- TimestampBehavior::className(),
- [
- 'class' => EnewsdologBehavior::className(),
- // 'defaultDoing' => '招投标项目 [{info.title}]',
- 'content' => '{profile.true_name}在{extra.time}{doing}招投标项目{info.title}',
- 'data' => [
- 'extra' => [
- 'time' => date('Y-m-d H:i:s')
- ]
- ]
- ]
- ];
- }
无需defaultDoing,自定义内容,profile对应的profile用户副表,也可以写user对应的字段名,extra是附加字段,自己想加什么就写什么,也有默认的时间是{current_time}
写入的操作日志内容示例如下(管理员是true_name真实姓名):
管理员在2021-03-05 14:54:18新增招投标项目xxxx项目
管理员在2021-03-05 15:32:52编辑招投标项目xxxx项目
管理员在2021-03-05 15:33:23删除招投标项目xxxx项目
- 'entity' => __CLASS__ // 定义为当前model,方便查询,不然API的model与backend的namespace不一致
3、记录用户ID在新增时写入user_id字段
- public function behaviors()
- {
- return [
- TimestampBehavior::className(),
- [
- 'class' => BlameableBehavior::className(),
- 'createdByAttribute' => 'user_id',
- 'updatedByAttribute' => false
- ]
- ];
- }
4、获取常用的用户信息
- public function behaviors()
- {
- return [
- ...
- UserBehavior::className()
- ];
- }
默认字段是根据user_id获取用户信息,也可指定字段名
- [
- "class" => UserBehavior::className(),
- "userIdAttribute" => "member_id"
- ]
5、顶踩
- use common\behaviors\VoteBehavior;
- public function behaviors()
- {
- return [
- ...
- [
- 'class' => VoteBehavior::className(),
- 'entity' => __CLASS__
- ],
- ];
- }
6、标签(仅用于document模块)
- use common\behaviors\TagBehavior;
- public function behaviors()
- {
- return [
- ...
- TagBehavior::className(),
- ];
- }
7、软删除
执行删除:model->softDelete(),写入deleted_at软删除时间
执行恢复:model->restore(),更新deleted_at删除时间为null
- use common\behaviors\SoftDeleteBehavior;
- public function behaviors()
- {
- return [
- ...
- [
- 'class' => SoftDeleteBehavior::className(),
- 'softDeleteAttributeValues' => [
- 'deleted_at' => function ($model) {
- return time();
- }
- ],
- 'restoreAttributeValues' => [
- 'deleted_at' => null
- ],
- 'invokeDeleteEvents' => false // 不触发删除相关事件
- ],
- ];
- }
控制器中使用:
- public function actionDelete($id)
- {
- $this->findModel($id)->softDelete();
- return ResultHelper::json("success","删除成功");
- }
8、安装多项目管理模块后,当前model有实体字段project_id,会在project_index索引表中对于每条信息关联的项目,加入索引表,便于后期根据项目查询信息
- public function behaviors()
- {
- return [
- [
- 'class' => ProjectBehavior::className(),
- 'attribute' => 'project_id', // 默认就是project_id
- 'entity' => __CLASS__ // 定义为当前model,方便查询,不然API的model与backend的namespace不一致
- ],
- ];
- }
需要获取项目名称,项目详情,从model中获取:
$model->project
$model->projectName
多项目管理模块2,多加了一个大类和小类的区分以及对应的搜索,这里的behaviour对应的需要改成:
- public function behaviors()
- {
- return [
- [
- 'class' => Project2Behavior::className(),
- 'attribute' => 'project_id', // 默认就是project_id
- 'entity' => __CLASS__ // 定义为当前model,方便查询,不然API的model与backend的namespace不一致
- ],
- ];
- }
用法与上面一致的
8、behavior记录
如果我在项目表,需要添加成员的关联表,那么我添加了一个behaviors在使用set魔术方法一直未进去时,如何解决?
(1)model的rules需要添加虚拟字段
(2)behaviors 设置的虚拟字段与form中是否一致