/** * Get every student that isnt inscripted in other division. * The inscription depends on the aproval method implemented by each school * * @param Division $division * * @return array Student[] */ public function getAvailableStudentsForDivision(Division $division) { // Get students just inscripted in other divisions $not_in_criteria = new Criteria(); $not_in_criteria->addJoin(DivisionStudentPeer::STUDENT_ID, StudentPeer::ID); $not_in_criteria->addJoin(DivisionStudentPeer::DIVISION_ID, DivisionPeer::ID, Criteria::INNER_JOIN); $not_in_criteria->add(DivisionPeer::CAREER_SCHOOL_YEAR_ID, $division->getCareerSchoolYear()->getId()); $not_in_criteria->clearSelectColumns(); $not_in_criteria->addSelectColumn(StudentPeer::ID); $stmt = StudentPeer::doSelectStmt($not_in_criteria); $not_in = $stmt->fetchAll(PDO::FETCH_COLUMN); $students_in = array(); foreach ($division->getCourses() as $course) { foreach ($course->getNonOptionCourseSubjects() as $course_subject) { $criteria_course = $this->getAvailableStudentsForCourseSubjectCriteria($course_subject); $criteria_course->clearSelectColumns(); $criteria_course->addSelectColumn(StudentPeer::ID); $stmt = StudentPeer::doSelectStmt($criteria_course); $students_in = array_merge($stmt->fetchAll(PDO::FETCH_COLUMN), $students_in); } } $students_in = array_diff($students_in, $not_in); $c = new Criteria(); //$c->addAnd(StudentPeer::ID,$not_in,Criteria::NOT_IN); $c->add(StudentPeer::ID, $students_in, Criteria::IN); return StudentPeer::doSelect($c); }