123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 16/7/23
- * Time: 下午9:00
- */
- namespace common\behaviors;
- use common\models\Vote;
- use common\models\VoteInfo;
- use common\traits\EntityTrait;
- use Yii;
- use yii\base\Behavior;
- use yii\db\ActiveRecord;
- class VoteBehavior extends Behavior
- {
- use EntityTrait;
- /**
- * @var \yii\db\ActiveRecord
- */
- public $owner;
- public function events()
- {
- return [
- ActiveRecord::EVENT_AFTER_INSERT => 'afterInsert',
- ActiveRecord::EVENT_AFTER_UPDATE => 'afterUpdate',
- ActiveRecord::EVENT_AFTER_DELETE => 'afterDelete',
- ];
- }
- public function getVoteModel()
- {
- }
- /**
- * 当前用户是否顶
- * @return bool
- */
- public function getIsUp()
- {
- if (!Yii::$app->user->isGuest) {
- $userId = Yii::$app->user->id;
- $up = Vote::find()->where(['entity' => $this->entity, 'entity_id' => $this->owner->id, 'user_id' => $userId, 'action' => Vote::ACTION_UP])->one();
- if ($up) {
- return true;
- }
- }
- return false;
- }
- /**
- * 当前用户是否踩
- * @return bool
- */
- public function getIsDown()
- {
- if (!Yii::$app->user->isGuest) {
- $userId = Yii::$app->user->id;
- $down = Vote::find()->where(['entity' => $this->entity, 'entity_id' => $this->owner->id, 'user_id' => $userId, 'action' => Vote::ACTION_DOWN])->one();
- if ($down) {
- return true;
- }
- }
- return false;
- }
- public function getVoteInfo()
- {
- return $this->owner->hasOne(VoteInfo::className(), [
- 'entity_id' => $this->owner->primaryKey()[0]
- ])->where(['entity' => $this->getEntity()]);
- }
- public function getUpTotal()
- {
- $model = $this->owner->voteInfo;
- if ($model == null) {
- return 0;
- }
- return $model->up;
- }
- public function getDownTotal()
- {
- $model = $this->owner->voteInfo;
- if ($model == null) {
- return 0;
- }
- return $model->down;
- }
- public function afterInsert()
- {
- $model = new VoteInfo();
- $model->entity = $this->getEntity();
- $model->entity_id = $this->getEntityId();
- $model->save();
- }
- public function afterUpdate()
- {
- /* @var $model \common\models\VoteInfo */
- $model = $this->owner->VoteInfo;
- if ($model == null) {
- $model = new VoteInfo();
- $model->entity = $this->getEntity();
- $model->entity_id = $this->getEntityId();
- $model->save();
- }
- }
- public function afterDelete()
- {
- $entity = $this->getEntity();
- $entityId = $this->getEntityId();
- VoteInfo::deleteAll(['entity' => $entity, 'entity_id' => $entityId]);
- Vote::deleteAll(['entity' => $entity, 'entity_id' => $entityId]);
- }
- }
|