119 lines
3.0 KiB
PHP
119 lines
3.0 KiB
PHP
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Author: ywxapp<admin@ywxapp.cn>
|
|
// +----------------------------------------------------------------------
|
|
declare (strict_types = 1);
|
|
|
|
namespace addon\blog\model;
|
|
|
|
use ywxapp\model\BaseModel;
|
|
|
|
|
|
class BlogCategory extends BaseModel
|
|
{
|
|
|
|
// 设置数据表名
|
|
protected $name = 'blog_category';
|
|
|
|
// 设置主键
|
|
protected $pk = 'id';
|
|
|
|
// 自动写入时间戳
|
|
protected $autoWriteTimestamp = 'int';
|
|
protected $createTime = 'create_at';
|
|
protected $updateTime = 'update_at';
|
|
|
|
// 定义允许写入的字段
|
|
protected $allowField = [
|
|
'uid', 'pid', 'name', 'description', 'sort', 'status'
|
|
];
|
|
|
|
// 设置字段类型
|
|
protected $type = [
|
|
'uid' => 'int',
|
|
'pid' => 'int',
|
|
'sort' => 'int',
|
|
'status' => 'int',
|
|
'create_at' => 'int',
|
|
'update_at' => 'int'
|
|
];
|
|
|
|
// 定义关联 - 文章
|
|
|
|
public function articles()
|
|
{
|
|
return $this->hasMany(BlogArticle::class, 'cid');
|
|
}
|
|
|
|
// 定义关联 - 父级分类
|
|
|
|
public function parent()
|
|
{
|
|
return $this->belongsTo(self::class, 'pid');
|
|
}
|
|
|
|
// 定义关联 - 子分类
|
|
|
|
public function children()
|
|
{
|
|
return $this->hasMany(self::class, 'pid');
|
|
}
|
|
|
|
// 获取文章数量
|
|
|
|
public function getArticleCount()
|
|
{
|
|
return $this->articles()->where('status', 1)->count();
|
|
}
|
|
|
|
// 检查分类是否可用
|
|
|
|
public function isActive()
|
|
{
|
|
return $this->status === 1;
|
|
}
|
|
|
|
/**
|
|
* 获取某会员「可用」的分类:自己创建的(uid=$uid) + 全局共享的(uid=0)
|
|
* 用于会员中心写文章时的分类下拉。
|
|
*/
|
|
public static function getAvailable(int $uid)
|
|
{
|
|
return self::where('status', 1)
|
|
->where(function ($query) use ($uid) {
|
|
$query->where('uid', 0)->whereOr('uid', $uid);
|
|
})
|
|
->order('sort', 'asc')
|
|
->select();
|
|
}
|
|
|
|
// 获取分类树形结构
|
|
|
|
public static function getCategoryTree()
|
|
{
|
|
$categories = self::order('sort', 'asc')->select()->toArray();
|
|
return self::buildTree($categories);
|
|
}
|
|
|
|
// 递归构建树形结构
|
|
|
|
private static function buildTree($items, $parentId = 0)
|
|
{
|
|
$tree = [];
|
|
foreach ($items as $item) {
|
|
if (($item['pid'] ?? 0) == $parentId) {
|
|
$children = self::buildTree($items, $item['id']);
|
|
if ($children) {
|
|
$item['children'] = $children;
|
|
}
|
|
$tree[] = $item;
|
|
}
|
|
}
|
|
return $tree;
|
|
}
|
|
}
|