where(function ($q) use ($params) { $q->where('name', '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']); } // 校区筛选 if (!empty($params['campus_id'])) { $query->where('campus_id', $params['campus_id']); } // 年级筛选 if (!empty($params['grade_id'])) { $query->where('grade_id', $params['grade_id']); } // 班级类型筛选 if (isset($params['type'])) { $query->where('type', $params['type']); } // 包含学校和校区信息 $query->with(['school:id,name,alias', 'campus:id,name,alias']); // 排序 $query->orderBy('school_id', 'asc') ->orderBy('campus_id', 'asc') ->orderBy('grade_id', 'asc') ->orderBy('number', 'asc'); return $query->paginate($params['page_size'] ?? 15); } /** * 获取简单列表(用于下拉选择等) */ public function getSimpleList(?int $schoolId = null, ?int $campusId = null): array { $query = SchoolClass::select('id', 'name', 'code', 'school_id', 'campus_id', 'grade_id', 'number') ->active() ->with(['school:id,name', 'campus:id,name']); if ($schoolId) { $query->where('school_id', $schoolId); } if ($campusId) { $query->where('campus_id', $campusId); } return $query->orderBy('grade_id', 'asc') ->orderBy('number', 'asc') ->get() ->toArray(); } /** * 获取指定用户管理的班级列表 */ public function getUserClasses(int $userId): array { $classIds = \App\Models\User::find($userId)->getClassIds(); return SchoolClass::whereIn('id', $classIds) ->active() ->with(['school:id,name', 'campus:id,name']) ->get() ->toArray(); } /** * 获取班级的学生列表 */ public function getClassStudents(int $classId): array { $class = SchoolClass::findOrFail($classId); return $class->studentClasses() ->with(['student:id,name,sno']) // 假设有学生模型 ->get() ->toArray(); } /** * 获取班级的老师列表 */ public function getClassTeachers(int $classId): array { $class = SchoolClass::findOrFail($classId); return $class->teacherClasses() ->with(['teacher:id,username,nickname']) ->get() ->toArray(); } /** * 获取班级统计信息 */ public function getClassStats(int $classId): array { $class = SchoolClass::findOrFail($classId); return [ 'student_count' => $class->studentClasses()->count(), 'teacher_count' => $class->teacherClasses()->count(), 'headman_count' => $class->teacherClasses()->headman()->count(), ]; } /** * 创建前的特殊处理 */ protected function beforeCreate(array &$data): void { // 设置默认值 $data['status'] = $data['status'] ?? 1; $data['type'] = $data['type'] ?? 0; $data['level'] = $data['level'] ?? 0; $data['number'] = $data['number'] ?? 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('指定的学校不存在'); } } // 验证校区是否存在 if (!empty($data['campus_id'])) { $campus = \App\Models\Schools\SchoolCampus::find($data['campus_id']); if (!$campus) { throw new \InvalidArgumentException('指定的校区不存在'); } // 验证校区是否属于指定学校 if ($campus->school_id !== $data['school_id']) { 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('指定的学校不存在'); } } // 验证校区是否存在 if (!empty($data['campus_id'])) { $campus = \App\Models\Schools\SchoolCampus::find($data['campus_id']); if (!$campus) { throw new \InvalidArgumentException('指定的校区不存在'); } // 验证校区是否属于指定学校 if (isset($data['school_id']) && $campus->school_id !== $data['school_id']) { throw new \InvalidArgumentException('指定的校区不属于该学校'); } } } }