Asset.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. "equity_interest","developer","date_completed","total_floor_area","contact_person","contact_phone","contact_email","property","building_type_description"
  21. ];
  22. protected static function booted(): void
  23. {
  24. static::addGlobalScope(new CompanyScope);
  25. }
  26. public function scopeAllowed(Builder $query): void
  27. {
  28. $userId = Auth::id();
  29. $query->where(function (Builder $query) use ($userId){
  30. return $query->whereIn('id', function ($query) use ($userId) {
  31. $query->select('asset_id')
  32. ->from('project_asset')
  33. ->whereIn('project_id', function ($query) use ($userId) {
  34. $query->select('project_id')
  35. ->from('team_members')
  36. ->where('user_id', $userId);
  37. });
  38. });
  39. })->orWhere(function (Builder $query)use ($userId) {
  40. return $query->where('acl', AssetACL::PRIVATE->value)->where('owner',$userId);
  41. })->orWhere(function (Builder $query)use ($userId) {
  42. return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%,' .$userId . ',%');
  43. });
  44. // $query->where(function (Builder $query) {
  45. // return $query->where('acl', AssetACL::PRIVATE->value)->where('owner', Auth::id());
  46. // })->orWhere(function (Builder $query) {
  47. // return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%,' . Auth::id() . ',%');
  48. // });
  49. }
  50. public function children(){
  51. return $this->hasMany(Asset::class ,'parent_id');
  52. }
  53. public function parent(){
  54. return $this->belongsTo(Asset::class ,'parent_id');
  55. }
  56. public function requirementGroups(){
  57. return $this->hasMany(RequirementGroup::class ,'asset_id');
  58. }
  59. public function requirements(){
  60. return $this->hasMany(Requirement::class ,'asset_id');
  61. }
  62. public function plans(){
  63. return $this->hasMany(Plan::class ,'asset_id');
  64. }
  65. public function projects(){
  66. return $this->belongsToMany(Project::class,'project_asset');
  67. }
  68. //获取子级需求数量
  69. public function getTotalRequirementsCountAttribute()
  70. {
  71. $childIds = [];
  72. Asset::where('path','like','%,'.$this->id.',%')->get('id')->each(function ($id)use (&$childIds){
  73. $childIds[]=$id['id'];
  74. });
  75. return Requirement::whereIn('asset_id',$childIds)->count();
  76. }
  77. //获取子级计划数量
  78. public function getTotalPlansCountAttribute()
  79. {
  80. $childIds = [];
  81. Asset::where('path','like','%,'.$this->id.',%')->get('id')->each(function ($id)use (&$childIds){
  82. $childIds[]=$id['id'];
  83. });
  84. return Plan::whereIn('asset_id',$childIds)->count();
  85. }
  86. public function library(){
  87. return $this->hasMany(Library::class ,'asset_id')->where('type', 'asset');
  88. }
  89. }