'int', 'parent_id' => 'int', 'is_active' => 'bool', 'sort_order' => 'int', ]; protected $hidden = [ 'deleted_by', 'deleted_at', ]; // 스파티 가드명(프로젝트 설정에 맞게 조정) protected string $guard_name = 'web'; /** 테넌트 관계 */ public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class, 'tenant_id'); } /** 상위/하위 부서 */ public function parent(): BelongsTo { return $this->belongsTo(self::class, 'parent_id'); } public function children() { return $this->hasMany(self::class, 'parent_id'); } /** 부서-사용자 N:N (추가 컬럼 포함 Pivot) */ public function users() { return $this->belongsToMany(User::class, 'department_user') ->using(DepartmentUser::class) ->withTimestamps() ->withPivot(['tenant_id', 'is_primary', 'joined_at', 'left_at']); } /** 부서의 권한 오버라이드(DENY/임시허용) */ public function permissionOverrides(): MorphMany { return $this->morphMany(PermissionOverride::class, 'model'); } /** 부서-사용자 매핑 로우들(피벗 테이블의 레코드들) */ public function departmentUsers() { return $this->hasMany(DepartmentUser::class, 'department_id'); } }