|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace App\ModelFilters;
|
|
|
|
|
|
+use App\Models\Asset;
|
|
|
use App\Models\Requirement;
|
|
|
use App\Models\RequirementGroup;
|
|
|
use EloquentFilter\ModelFilter;
|
|
@@ -26,7 +27,34 @@ class RequirementFilter extends ModelFilter
|
|
|
}
|
|
|
|
|
|
public function assetId($assetId){
|
|
|
- return $this->where('asset_id',$assetId);
|
|
|
+ $asset = Asset::find($assetId);
|
|
|
+ if (!$asset || !$asset->children()->first()) {
|
|
|
+ // 如果没有子级,只返回该分组的需求
|
|
|
+ return $this->where('asset_id', $assetId);
|
|
|
+ }
|
|
|
+ $allRelatedIds = $this->getAllRelatedIds($assetId);
|
|
|
+ array_push($allRelatedIds, $asset->id);
|
|
|
+ //把父级id去重
|
|
|
+ $unIds=array_unique($allRelatedIds);
|
|
|
+ return $this->whereIn('asset_id',$unIds);
|
|
|
+ }
|
|
|
+ //递归获取资产
|
|
|
+ private function getAllRelatedIds($assetId)
|
|
|
+ {
|
|
|
+ $asset = Asset::find($assetId);
|
|
|
+
|
|
|
+ if (!$asset) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取所有子级ID
|
|
|
+ $childIds = $asset->children()->pluck('id')->toArray();
|
|
|
+ // 递归获取所有子级的子级ID
|
|
|
+ foreach ($childIds as $childId) {
|
|
|
+ $childIds = array_merge($childIds, $this->getAllRelatedIds($childId));
|
|
|
+ }
|
|
|
+
|
|
|
+ return $childIds;
|
|
|
}
|
|
|
|
|
|
public function groupId($groupId){
|
|
@@ -36,17 +64,15 @@ class RequirementFilter extends ModelFilter
|
|
|
// 如果没有子级,只返回该分组的需求
|
|
|
return $this->where('requirement_group_id', $groupId);
|
|
|
}
|
|
|
-
|
|
|
- $allRelatedGroupIds = $this->getAllRelatedGroupIds($groupId);
|
|
|
+ $allRelatedGroupIds = $this->getAllGroupRelatedIds($groupId);
|
|
|
//把父级id去重
|
|
|
$unIds=array_unique($allRelatedGroupIds);
|
|
|
return $this->whereIn('requirement_group_id',$unIds);
|
|
|
}
|
|
|
-
|
|
|
- private function getAllRelatedGroupIds($groupId)
|
|
|
+ //递归获取需求分组
|
|
|
+ private function getAllGroupRelatedIds($groupId)
|
|
|
{
|
|
|
$group = RequirementGroup::find($groupId);
|
|
|
-
|
|
|
if (!$group) {
|
|
|
return [];
|
|
|
}
|
|
@@ -56,7 +82,7 @@ class RequirementFilter extends ModelFilter
|
|
|
|
|
|
// 递归获取所有子级的子级ID
|
|
|
foreach ($childIds as $childId) {
|
|
|
- $childIds = array_merge($childIds, $this->getAllRelatedGroupIds($childId));
|
|
|
+ $childIds = array_merge($childIds, $this->getAllGroupRelatedIds($childId));
|
|
|
}
|
|
|
|
|
|
// 添加父级ID(如果需要的话)
|