Category.php
5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?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
{
//设置关联表名
protected $table = 'gl_product_category';
//连接数据库
protected $connection = 'custom_mysql';
use SoftDeletes;
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();
}
/**
* @remark :获取tdk
* @name :getCateTdkAttribute
* @author :lyh
* @method :post
* @time :2025/2/19 11:03
*/
public function getCateTdkAttribute($value){
if(!empty($value)){
$value = Arr::s2a($value);
}
return $value;
}
/**
* 根据产品分类获取分类列表和产品
*/
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;
}
}