Category.php 4.9 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;

    /**
     * 根据分类ID查询上面所有父级,递归
     */
    public static function getAllFatherCategory($categoryId): array
    {
        $category = self::find($categoryId);
        return $category->getAncestorsRecursive();
    }

    /**
     * 根据产品分类获取分类列表和产品
     */
    public static function getCategoryBySelfCategory($projectId,$routerMap)
    {
        if ($routerMap->source_id == 0){
            $categoryList = Category::with("products")->where("project_id",$projectId)->where("pid",0)->where("status",1)->orderBy("sort","desc")->orderBy("id","desc")->get();
        }else{
            $categoryIds = [];
            $category = Category::where("project_id",$projectId)->where("pid",$routerMap->source_id)->where("status",1)->orderBy("sort","desc")->orderBy("id","desc")->get();
            if (count($category)>=1){
                foreach ($category as $categoryItem){
                    $categoryIds[] = $categoryItem->id;
                }
            }else{
                $categoryIds[] = $routerMap->source_id;
            }
            $categoryList = Category::with("products")->where("project_id",$projectId)->whereIn("id",$categoryIds)->where("status",1)->orderBy("sort","desc")->orderBy("id","desc")->get();
        }
        return $categoryList;
    }

    /**
     * 森联数据处理
     */
    public static function getSenLianCategoryAndProducts($routerMap)
    {
        $data = [];
        //下级分类及产品+产品扩展型号
        $categorys = null;
        $sonData = self::with("productsSl")->where("project_id",$routerMap->project_id)->where("status",1)->where("pid",$routerMap->source_id)->orderBy("id","desc")->get();
        if ($routerMap->route == "products" || !empty($sonData)){
            if ($routerMap->route == "products"){
                $categorys = self::with("productsSl")->where("project_id",$routerMap->project_id)->where("status",1)->where("pid",0)->where("route","!=","products")->orderBy("id","desc")->get();
            }else{
                $categorys = $sonData;
            }
        }
        if (!empty($categorys)){
            $categorys = $categorys->toArray();
        }
        $data["categorySon"] = $categorys;
        return $data;
    }

    /**
     * 获取指定分类的所有子分类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;
    }
}