Category.php 2.7 KB
<?php

namespace App\Models\Product;


use App\Helper\Arr;
use App\Models\Base;
use Illuminate\Database\Eloquent\SoftDeletes;

/**
 * @method static get()
 * @method static where(string $string, int $int)
 */
class Category extends Base
{
    use SoftDeletes;

    //设置关联表名
    protected $table = 'gl_product_category';
    //连接数据库
    protected $connection = 'custom_mysql';

    const STATUS_ACTIVE = 1;
    //新闻产品分类列表分页条数
    public static $productCategoryPagePercent = 15;
    public static $productSearchPagePercent = 12;

    /**
     * 获取指定分类的所有子分类IDS(包括自己)
     * @param $id
     * @return array
     * @author zbj
     * @date 2023/10/17
     */
    public static function getChildIdsArr($id)
    {
        if(!$id){
            return [];
        }
        $list = self::where('status', self::STATUS_ACTIVE)->select(['id','pid'])->get()->toArray();
        $ids = [];
        Arr::findChildIds($list, $id, $ids);
        $ids[] = $id; //包含自己
        return $ids;
    }

    /**
     * @remark :获取当前id下所有子集
     * @name   :getAllSub
     * @author :lyh
     * @method :post
     * @time   :2023/10/18 15:10
     */
    public function getAllSub($list,$id,&$str = []){
        foreach ($list as $k =>$v){
            if($v['pid'] == $id){
                $str[] = $v['id'];
                $this->getAllSub($list,$v['id'],$str);
            }
        }
        return $str;
    }

    /**
     * 关联产品数量
     * @param $cate_id
     * @return mixed
     * @author zbj
     * @date 2023/4/28
     */
    public function getProductNum($list,$cate_id){
        $str[] = $cate_id;
        $cate_ids = $this->getAllSub($list,$cate_id,$str);
        $productArr = CategoryRelated::whereIn('cate_id',$cate_ids)->pluck('product_id')->unique()->toArray();
        $count  = count($productArr);
        return $count;
    }

    /**
     * 根据分类ID查询下面所有子级ID,递归
     */
    public static function getAllSonCategoryById($projectId,$id): array
    {
        $ids = [];
        $ids[] = $id;
        self::getProductCategoryList($projectId,$id,$ids);
        return $ids;

    }

    /**
     * 获取分类
     */
    public static function getProductCategoryList($projectId,$id,&$ids)
    {
        $categoryListPid = self::where("project_id",$projectId)->where("pid",$id)->get();
        if (!empty($categoryListPid)){
            foreach ($categoryListPid as $item){
                $ids[] = $item->id;
                self::getProductCategoryList($projectId,$item->id,$ids);
            }
        }else{
            $ids[] = $categoryListPid->id;
        }
        return $ids;
    }
}