*/ protected $fillable = [ 'name', 'rank', 'color', 'sort_order', 'description', ]; /** * 字段类型转换 */ public function casts(): array { return [ 'rank' => 'integer', 'sort_order' => 'integer', ]; } /** * 获取该部门下的所有职务(按 rank 降序) */ public function positions(): HasMany { return $this->hasMany(Position::class)->orderByDesc('rank'); } /** * 获取部门当前所有在职用户(通过职务关联) */ public function activeMembers(): Collection { return UserPosition::query() ->whereHas('position', fn ($q) => $q->where('department_id', $this->id)) ->where('is_active', true) ->with(['user', 'position']) ->get(); } /** * 按位阶倒序排列的查询范围 */ public function scopeOrdered($query): void { $query->orderBy('sort_order')->orderByDesc('rank'); } }