$attribute, $matches) > 0) { $replyUserName = $matches[1]; $replyUserId = User::find()->select('id')->where(['username' => $replyUserName])->scalar(); $this->reply_uid = $replyUserId; } } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'entity' => '来源', 'entity_id' => '来源ID', 'user_id' => '评论人', 'user_ip' => 'IP', 'content' => '内容', 'up' => '顶', 'down' => '踩', 'is_top' => '是否置顶', 'status' => '状态', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'parent_id' => '父评论' ]; } /** * {@inheritdoc} */ public function behaviors() { return [ TimestampBehavior::className(), [ 'class' => BlameableBehavior::className(), 'createdByAttribute' => 'user_id', 'updatedByAttribute' => false ], VoteBehavior::className(), UserBehavior::className(), [ 'class' => UserBehaviorBehavior::className(), 'eventName' => [self::EVENT_AFTER_INSERT], 'name' => 'comment', 'rule' => [ 'cycle' => 24, 'max' => 10, 'counter' => 5, ], 'content' => '{user.username}在{extra.time}评论', 'data' => [ 'extra' => [ 'time' => date('Y-m-d H:i:s') ] ] ] ]; } /** * 获取所有子评论. * * @return \yii\db\ActiveQuery */ public function getSons() { return $this->hasMany(self::className(), ['parent_id' => 'id'])->where(['status' => 1]); } public function getParent() { return $this->hasOne(self::className(), ['id' => 'parent_id']); } public function transactions() { return [ self::SCENARIO_DEFAULT => self::OP_ALL, ]; } public static function process($data) { preg_match('/@(\S+?)\s/', $data, $matches); if (!empty($matches)) { $replyUserName = $matches[1]; $replyUserId = User::find()->select('id')->where(['username' => $replyUserName])->scalar(); $data = preg_replace('/(@\S+?\s)/', Html::a('$1', ['/user/default/index', 'id' => $replyUserId]), $data); } return $data; } public function beforeSave($insert) { if (parent::beforeSave($insert)) { if ($insert == true) { if ($this->parent_id) { $this->reply_uid = $this->parent->user_id; } $this->user_ip = Yii::$app->getRequest()->getUserIP(); return true; } return true; } return false; } public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); if ($insert) { $this->updateCommentTotal(); return true; } return true; } public function afterDelete() { parent::afterDelete(); $this->updateCommentTotal(); } public function updateCommentTotal() { $model = CommentInfo::find()->where(['entity' => $this->entity, 'entity_id' => $this->entity_id])->one(); $total = Comment::activeCount($this->entity, $this->entity_id); if($model == null && $total != 0) { $model = new CommentInfo(); $model->entity =$this->entity; $model->entity_id = $this->entity_id; $model->total =$total; $model->save(); } else { $model->total = $total; $model->save(); } } public static function activeCount($entity, $entity_id = NULL) { return self::find()->where([ 'entity' => $entity, 'entity_id' => $entity_id, 'status' => 1 ])->count(); } /** * 关联实体列表 * @return array * @author nodelog */ public static function getEntityList() { return [ 'clock' => Clock::className(),//朋友圈 'goods' => Goods::className(),//商品 'article' => Article::className(),//文章 ]; } }