| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 | <?phpnamespace common\models;use common\behaviors\PositionBehavior;use common\behaviors\CacheInvalidateBehavior;use common\behaviors\MetaBehavior;use common\behaviors\SoftDeleteBehavior;use common\enums\StatusEnum;use common\helpers\Tree;use common\models\behaviors\CategoryBehavior;use common\models\query\CategoryQuery;use Yii;use yii\behaviors\TimestampBehavior;use yii\caching\TagDependency;use yii\db\Expression;/** * This is the model class for table "{{%category}}". * * @property int $id * @property int $pid * @property string $title * @property string $slug * @property string $description * @property integer $status * @property int $created_at * @property int $updated_at * @property string $module * @property string $cover * @property int $allow_publish * @property int $type * @property int $is_del */class Industry extends \yii\db\ActiveRecord{    /**     * {@inheritdoc}     */    public static function tableName()    {        return '{{%industry}}';    }    /**     * {@inheritdoc}     */    public function rules()    {        return [            [['title'], 'required'],            //中文没法自动生成slug,又没必要必填            [                'slug', 'default', 'value' => function ($model) {                return $model->title;            }            ],            ['module', 'safe'],            [['pid', 'sort', 'allow_publish', 'type', 'status'], 'integer'],            ['pid', 'default', 'value' => 0],            [['sort', 'is_del'], 'default', 'value' => 0],            ['status', 'default', 'value' => StatusEnum::STATUS_ON],        ];    }    /**     * {@inheritdoc}     */    public function attributeLabels()    {        return [            'id' => 'ID',            'title' => '名称',            'slug' => '标识',            'pid' => '上级分类',            'ptitle' => '上级分类', // 非表字段,方便后台显示            'description' => '分类介绍',            'article' => '文章数', //冗余字段,方便查询            'sort' => '排序',            'module' => '支持的人才模型',            'allow_publish' => '是否允许发布内容',            'type' => '类型',            'created_at' => '创建时间',            'updated_at' => '更新时间',            'status' => Yii::t('common', '状态'),        ];    }    /**     * {@inheritdoc}     */    public function behaviors()    {        return [            [                'class' => SoftDeleteBehavior::className(),                'softDeleteAttributeValues' => [                    'updated_at' => time(),                    'is_del' => StatusEnum::STATUS_ON,                    'status' => StatusEnum::STATUS_OFF,                ],                'invokeDeleteEvents' => false // 不触发删除相关事件            ],            TimestampBehavior::className(),            [                'class' => MetaBehavior::className(),            ],            CategoryBehavior::className(),            'positionBehavior' => [                'class' => PositionBehavior::className(),                'positionAttribute' => 'sort',                'groupAttributes' => [                    'pid'                ],            ],            [                'class' => CacheInvalidateBehavior::className(),                'tags' => [                    'categoryList'                ]            ]        ];    }    public function getMetaData()    {        $model = $this->getMetaModel();        $title = $model->title ?: $this->title;        $keywords = $model->keywords;        $description = $model->description ?: $this->description;        return [$title, $keywords, $description];    }    /**     * 获取分类名     */    public function getPtitle()    {        return static::find()->select('title')->where(['id' => $this->pid])->scalar();    }    public static function lists($module = null)    {        $list = Yii::$app->cache->get(['categoryList', $module]);        if ($list === false) {            $query = static::find()->active();            if ($module) {                $query->andWhere(new Expression("FIND_IN_SET('{$module}', module) "));            }            $list = $query->asArray()->all();            Yii::$app->cache->set(['categoryList', $module], $list, 0, new TagDependency(['tags' => ['categoryList']]));        }        return $list;    }    public static function listsByType($type = null)    {        $list = Yii::$app->cache->get(['categoryListByType', $type]);        if ($list === false) {            $query = static::find()->active();            if (isset($type)) {                $query->andWhere(['type' => $type]);            }            $list = $query->asArray()->all();            Yii::$app->cache->set(['categoryListByType', $type], $list, 0, new TagDependency(['tags' => ['categoryListByType']]));        }        return $list;    }    public static function getDropDownList($tree = [], &$result = [], $deep = 0, $separator = '--')    {        $deep++;        foreach ($tree as $list) {            $result[$list['id']] = str_repeat($separator, $deep - 1) . $list['title'];            if (isset($list['children'])) {                self::getDropDownList($list['children'], $result, $deep);            }        }        return $result;    }    public function getCategoryNameById($id)    {        $list = $this->lists();        return isset($list[$id]) ? $list[$id] : null;    }    public static function getIdByName($name)    {        $list = self::lists();        return array_search($name, $list);    }    public static function findByIdOrSlug($id)    {        if (intval($id) == 0) {            $condition = ["slug" => $id];        } else {            $condition = [                $id            ];        }        return static::findOne($condition);    }    public static function getAllowPublishEnum()    {        return [            '不允许',            '只允许后台',            '允许前后台'        ];    }    public static function getTypeEnum()    {        return [            '分类',            '产业链',        ];    }    public function beforeSave($insert)    {        if (parent::beforeSave($insert)) {            if (!empty($this->module)) {                $this->module = implode(',', $this->module);            }            return true;        } else {            return false;        }    }    public function afterSave($insert, $changedAttributes)    {        parent::afterSave($insert, $changedAttributes);//        Yii::$app->getCache()->delete('categoryList');//        Yii::$app->getCache()->delete('categoryListByType');        Yii::$app->cache->flush();        return true;    }    public function afterFind()    {        parent::afterFind();        $this->module = explode(',', $this->module);    }    public function renderModule($separator = ',')    {        return join($separator, array_map(function ($val) {            return array_get(ArticleModule::getTypeEnum(), $val);        }, $this->module));    }    /**     * @inheritdoc     * @return CategoryQuery the newly created [[ActiveQuery]] instance.     */    public static function find()    {        return Yii::createObject(CategoryQuery::className(), [get_called_class()]);    }}
 |