'\common\models\User', 'targetAttribute' => 'id'], ['be_user_id', 'exist', 'targetClass' => '\common\models\User', 'targetAttribute' => 'id'], ['land_create_time', 'exist', 'targetClass' => '\common\models\Land', 'targetAttribute' => 'crop_start_time'], ['position', 'number', 'integerOnly' => true, 'min' => 0, 'max' => EnumUtil::LAND_MAX_POSITION], ['type', 'in', 'range' => EnumUtil::INTERACTION_TYPE_LIST], ['num', 'default', 'value' => 0], ['num', 'number', 'integerOnly' => true, 'min' => 0], ['created_at', 'default', 'value' => 0], ['updated_at', 'default', 'value' => 0], ]; } public static function findBy($from_user_id, $be_user_id, $land_create_time, $position, $type) { return self::findOne([ 'from_user_id' => $from_user_id, 'be_user_id' => $be_user_id, 'land_create_time' => $land_create_time, 'position' => $position, 'type' => $type, ]); } public function afterFind() { parent::afterFind(); $this->saveRedis(); } public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); $this->saveRedis(); } public function saveRedis() { $key = RedisKeyUtil::interaction($this->from_user_id, $this->be_user_id, $this->land_create_time, $this->position, $this->type); Yii::$app->redis->setex($key, Yii::$app->params['redis_cache_time'], json_encode($this->toArray())); Yii::$app->redis->addKey($key); } public static function findRedis($from_user_id, $be_user_id, $land_create_time, $position, $type) { $jsonStrData = Yii::$app->redis->get(RedisKeyUtil::interaction($from_user_id, $be_user_id, $land_create_time, $position, $type)); if ($jsonStrData == null || empty($jsonStrData)) return self::findBy($from_user_id, $be_user_id, $land_create_time, $position, $type); $data = json_decode($jsonStrData, true); $obj = new Interaction(); $obj->setAttributes($data, false); $obj->setIsNewRecord(false); return $obj; } }