SaveImgBehavior::className(), 'fields' => [ [ 'name' => 'image', 'directory' => 'articles', ], ], ], 'language' => [ 'class' => LanguageBehavior::className(), ], ]; } /** * @inheritdoc */ public function rules() { return [ [ [ 'date' ], 'default', 'value' => function() { return time(); }, ], [ [ 'date' ], 'safe', ], [ [ 'date' ], 'filter', 'filter' => function($value) { return strtotime($value) ? : time(); }, ], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => Yii::t('app', 'ID'), 'date' => Yii::t('app', 'Date'), 'image' => Yii::t('app', 'Image'), 'imageUrl' => Yii::t('app', 'Image'), ]; } public function recalculateRating() { /** * @var ArticleToRating $averageRating */ $average = $this->getComments() ->joinWith('rating') ->select([ 'average' => 'avg(artbox_comment_rating.value)::float' ]) ->scalar(); if(!$average) { $average = 0; } $averageRating = $this->averageRating; if(!empty( $averageRating )) { $averageRating->value = $average; } else { $averageRating = new ArticleToRating([ 'articles_id' => $this->id, 'value' => $average, ]); } if($averageRating->save()) { return true; } else { return false; } } public function getComments() { return $this->hasMany(CommentModel::className(), [ 'entity_id' => 'id' ]) ->where([ 'artbox_comment.entity' => self::className(), 'artbox_comment.status' => CommentModel::STATUS_ACTIVE, 'artbox_comment.artbox_comment_pid' => NULL, ]); } public function getAverageRating() { return $this->hasOne(ArticleToRating::className(), [ 'articles_id' => 'id' ]); } }