// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\haonav\model; use ywxapp\model\BaseModel; class Category extends BaseModel { protected function getOptions(): array { // 所有的参数配置统一返回 return [ 'strict' => false, 'name' => 'haonav_category', // 'connection' => '', // 'query' => [], // 'type' => [], // 'hidden' => [], // 'visible' => [], // 'append' => [], 'autoRelation' => [], 'createTime' => 'create_at', 'updateTime' => 'update_at', 'dateFormat' => 'Y-m-d H:i:s', ]; } public function links() { return $this->hasMany(Links::class, 'cid', 'id'); } /** * 二级分类(pid 指向自身) */ public function children() { return $this->hasMany(self::class, 'pid', 'id')->where('status', 1)->order('sort', 'desc'); } /** * 按二级分类分组的链接(首页/分类页用) * 返回二级分类及其下属链接,sub_cid=0 的链接归入「常用」 */ public function subLinks() { return $this->hasMany(Links::class, 'sub_cid', 'id') ->where('status', 1)->order('click_count', 'desc'); } /** * 删除前保护:存在子分类或下属链接时禁止删除,避免产生孤儿数据 * @param \think\Model $model * @throws \think\Exception */ public static function onBeforeDelete($model) { $childCount = self::where('pid', $model->id)->count(); if ($childCount > 0) { throw new \think\Exception('该分类下还存在 ' . $childCount . ' 个子分类,请先处理子分类'); } $linkCount = \addon\haonav\model\Links::where('cid', $model->id)->count(); if ($linkCount > 0) { throw new \think\Exception('该分类下还存在 ' . $linkCount . ' 个链接,请先移走或删除这些链接'); } } }