where(function ($q) use ($params) { $q->where('name', 'like', '%' . $params['keyword'] . '%') ->orWhere('alias', 'like', '%' . $params['keyword'] . '%') ->orWhere('code', 'like', '%' . $params['keyword'] . '%'); }); } // 状态筛选 if (isset($params['status'])) { $query->where('status', $params['status']); } // 学校筛选 if (!empty($params['school_id'])) { $query->where('school_id', $params['school_id']); } // 包含学校信息 $query->with(['school:id,name,alias']); // 排序 $query->orderBy('school_id', 'asc')->orderBy('id', 'desc'); return $query->paginate($params['page_size'] ?? 15); } /** * 获取简单列表(用于下拉选择等) */ public function getSimpleList(?int $schoolId = null): array { $query = SchoolCampus::select('id', 'name', 'alias', 'code', 'school_id') ->active() ->with(['school:id,name']); if ($schoolId) { $query->where('school_id', $schoolId); } return $query->get()->toArray(); } /** * 获取指定用户管理的校区列表 */ public function getUserCampuses(int $userId): array { $campusIds = \App\Models\User::find($userId)->getCampusIds(); return SchoolCampus::whereIn('id', $campusIds) ->active() ->with(['school:id,name']) ->get() ->toArray(); } /** * 获取校区的班级列表 */ public function getCampusClasses(int $campusId): array { $campus = SchoolCampus::findOrFail($campusId); return $campus->classes() ->active() ->select('id', 'name', 'code', 'grade_id', 'number') ->orderBy('grade_id', 'asc') ->orderBy('number', 'asc') ->get() ->toArray(); } /** * 获取校区统计信息 */ public function getCampusStats(int $campusId): array { $campus = SchoolCampus::findOrFail($campusId); return [ 'class_count' => $campus->classes()->active()->count(), 'student_count' => \App\Models\Students\StudentClass::whereHas('schoolClass', function ($query) use ($campusId) { $query->where('campus_id', $campusId); })->count(), 'teacher_count' => \App\Models\Teachers\TeacherClass::whereHas('schoolClass', function ($query) use ($campusId) { $query->where('campus_id', $campusId); })->distinct('teacher_id')->count(), ]; } /** * 创建前的特殊处理 */ protected function beforeCreate(array &$data): void { // 设置默认值 $data['status'] = $data['status'] ?? 1; $data['self_support'] = $data['self_support'] ?? 0; $data['is_open_user_login'] = $data['is_open_user_login'] ?? 0; // 验证学校是否存在 if (!empty($data['school_id'])) { $school = \App\Models\Schools\School::find($data['school_id']); if (!$school) { throw new \InvalidArgumentException('指定的学校不存在'); } } } /** * 更新前的特殊处理 */ protected function beforeUpdate(array &$data): void { // 移除不允许更新的字段 unset($data['id']); // 验证学校是否存在 if (!empty($data['school_id'])) { $school = \App\Models\Schools\School::find($data['school_id']); if (!$school) { throw new \InvalidArgumentException('指定的学校不存在'); } } } }