'integer', 'parent_id' => 'integer', 'is_active' => 'boolean', 'sort_order' => 'integer', ]; protected $hidden = [ 'deleted_by', 'deleted_at', ]; /** * 상위 부서 */ public function parent(): BelongsTo { return $this->belongsTo(self::class, 'parent_id'); } /** * 하위 부서 */ public function children(): HasMany { return $this->hasMany(self::class, 'parent_id'); } /** * 부서-사용자 매핑 (DepartmentUser pivot) */ public function departmentUsers(): HasMany { return $this->hasMany(DepartmentUser::class, 'department_id'); } /** * 부서에 속한 사용자들 (belongsToMany) */ public function users() { return $this->belongsToMany(User::class, 'department_user') ->withTimestamps() ->withPivot(['tenant_id', 'is_primary', 'joined_at', 'left_at']); } }