where(function (Builder $query) { return $query->where('acl', AssetACL::PRIVATE->value)->where('owner', Auth::id()); })->orWhere(function (Builder $query) { return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%' . Auth::id() . '%'); }); } public function children(){ return $this->hasMany(Asset::class ,'parent_id'); } public function parent(){ return $this->belongsTo(Asset::class ,'parent_id'); } public function requirements(){ return $this->hasMany(Requirement::class ,'asset_id'); } public function plans(){ return $this->hasMany(Plan::class ,'asset_id'); } public function projects(){ return $this->belongsToMany(Project::class,'project_asset'); } //获取子级需求数量 public function getTotalRequirementsCountAttribute() { $totalRequirementsCount = $this->requirements()->count(); // 当前资产的需求数量 foreach ($this->children as $child) { $totalRequirementsCount += $child->getTotalRequirementsCountAttribute(); // 递归调用子资产的方法 } return $totalRequirementsCount; } //获取子级计划数量 public function getTotalPlansCountAttribute() { $totalPlansCount = $this->plans()->count(); // 当前资产的需求数量 foreach ($this->children as $child) { $totalPlansCount += $child->getTotalPlansCountAttribute(); // 递归调用子资产的方法 } return $totalPlansCount; } }