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 (isset($params['type'])) { $query->where('type', $params['type']); } // 省市区筛选 if (!empty($params['province_id'])) { $query->where('province_id', $params['province_id']); } if (!empty($params['city_id'])) { $query->where('city_id', $params['city_id']); } if (!empty($params['district_id'])) { $query->where('district_id', $params['district_id']); } // 学段筛选 if (!empty($params['grade_period'])) { $query->where('grade_period', $params['grade_period']); } // 排序 $query->ordered(); return $query->paginate($params['page_size'] ?? 15); } /** * 获取简单列表(用于下拉选择等) */ public function getSimpleList(): array { return School::select('id', 'name', 'alias', 'code') ->active() ->ordered() ->get() ->toArray(); } /** * 获取指定用户管理的学校列表 */ public function getUserSchools(int $userId): array { $schoolIds = \App\Models\User::find($userId)->getSchoolIds(); return School::whereIn('id', $schoolIds) ->active() ->ordered() ->get() ->toArray(); } /** * 获取学校的校区列表 */ public function getSchoolCampuses(int $schoolId): array { $school = School::findOrFail($schoolId); return $school->campuses() ->active() ->select('id', 'name', 'alias', 'code') ->get() ->toArray(); } /** * 获取学校的班级列表 */ public function getSchoolClasses(int $schoolId, ?int $campusId = null): array { $school = School::findOrFail($schoolId); $query = $school->classes()->active(); if ($campusId) { $query->where('campus_id', $campusId); } return $query->select('id', 'name', 'code', 'campus_id', 'grade_id', 'number') ->orderBy('grade_id', 'asc') ->orderBy('number', 'asc') ->get() ->toArray(); } /** * 获取学校统计信息 */ public function getSchoolStats(int $schoolId): array { $school = School::findOrFail($schoolId); return [ 'campus_count' => $school->campuses()->active()->count(), 'class_count' => $school->classes()->active()->count(), 'student_count' => \App\Models\Students\StudentClass::where('school_id', $schoolId)->count(), 'teacher_count' => \App\Models\Teachers\TeacherClass::where('school_id', $schoolId)->distinct('teacher_id')->count(), ]; } /** * 创建前的特殊处理 */ protected function beforeCreate(array &$data): void { // 设置默认值 $data['status'] = $data['status'] ?? 1; $data['show_order'] = $data['show_order'] ?? 999; $data['sno_automatic'] = $data['sno_automatic'] ?? 0; $data['max_sno'] = $data['max_sno'] ?? 2; $data['is_open_user_login'] = $data['is_open_user_login'] ?? 0; } /** * 更新前的特殊处理 */ protected function beforeUpdate(array &$data): void { // 移除不允许更新的字段 unset($data['id']); } }