Asset.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Enums\AssetACL;
  4. use App\Models\Scopes\CompanyScope;
  5. use EloquentFilter\Filterable;
  6. use Illuminate\Database\Eloquent\Builder;
  7. use Illuminate\Database\Eloquent\Factories\HasFactory;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Support\Facades\Auth;
  10. /**
  11. * @method static \Illuminate\Database\Eloquent\Builder allowed()
  12. */
  13. class Asset extends Model
  14. {
  15. use HasFactory, Filterable;
  16. protected $fillable = [
  17. "name", "code", "description", "company_id", "status", "created_by",
  18. "owner", "address", "group_id", "geo_address_code", "acl",
  19. "whitelist", "latitude", "longitude","parent_id", "path",
  20. ];
  21. protected static function booted(): void
  22. {
  23. static::addGlobalScope(new CompanyScope);
  24. }
  25. public function scopeAllowed(Builder $query): void
  26. {
  27. $query->where(function (Builder $query) {
  28. return $query->where('acl', AssetACL::PRIVATE->value)->where('owner', Auth::id());
  29. })->orWhere(function (Builder $query) {
  30. return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%' . Auth::id() . '%');
  31. });
  32. }
  33. public function children(){
  34. return $this->hasMany(Asset::class ,'parent_id');
  35. }
  36. public function parent(){
  37. return $this->belongsTo(Asset::class ,'parent_id');
  38. }
  39. public function requirements(){
  40. return $this->hasMany(Requirement::class ,'asset_id');
  41. }
  42. public function plans(){
  43. return $this->hasMany(Plan::class ,'asset_id');
  44. }
  45. public function projects(){
  46. return $this->belongsToMany(Project::class,'project_asset');
  47. }
  48. //获取子级需求数量
  49. public function getTotalRequirementsCountAttribute()
  50. {
  51. $totalRequirementsCount = $this->requirements()->count(); // 当前资产的需求数量
  52. foreach ($this->children as $child) {
  53. $totalRequirementsCount += $child->getTotalRequirementsCountAttribute(); // 递归调用子资产的方法
  54. }
  55. return $totalRequirementsCount;
  56. }
  57. //获取子级计划数量
  58. public function getTotalPlansCountAttribute()
  59. {
  60. $totalPlansCount = $this->plans()->count(); // 当前资产的需求数量
  61. foreach ($this->children as $child) {
  62. $totalPlansCount += $child->getTotalPlansCountAttribute(); // 递归调用子资产的方法
  63. }
  64. return $totalPlansCount;
  65. }
  66. }