12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace App\Models;
- use App\Models\Enums\AssetACL;
- use App\Models\Scopes\CompanyScope;
- use EloquentFilter\Filterable;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Support\Facades\Auth;
- /**
- * @method static \Illuminate\Database\Eloquent\Builder allowed()
- */
- class Asset extends Model
- {
- use HasFactory, Filterable;
- protected $fillable = [
- "name", "code", "description", "company_id", "status", "created_by",
- "owner", "address", "group_id", "geo_address_code", "acl",
- "whitelist", "latitude", "longitude","parent_id", "path",
- "equity_interest","developer","date_completed","total_floor_area","contact_person","contact_phone","contact_email","property","building_type_description"
- ];
- protected static function booted(): void
- {
- static::addGlobalScope(new CompanyScope);
- }
- public function scopeAllowed(Builder $query): void
- {
- $query->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 requirementGroups(){
- return $this->hasMany(RequirementGroup::class ,'asset_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;
- }
- }
|