1

学生がコースに属し、コースが学校に属している場合:

学校内のすべての生徒の数を保存/取得する最良の方法は何ですか?

私は最近 counterCache を発見しましたが、これは Student が直接学校に所属している場合にのみ機能します。foreachループですべてのコースの学生を合計して、手動でカウントすることを考えていました。もっときちんとした方法はありますか?

これは、学校の他のすべてのカウント(コース、モジュール、講師)を保存する方法であるため、できればschoolテーブルにstudent_countフィールドを保存したいと思いますが、それは私のうるさいOCDが作動している可能性があります.

4

1 に答える 1

0

あなたの質問に従って、次のコードを試してください。

function test(){
    $this->loadModel('Student');        
    $joins = array(
            array(
                'table' => 'courses',
                'alias'  => 'Course',
                'type'  => 'LEFT',
                'conditions' => array('Course.id = Student.course_id')
            ),
            array(
                'table' => 'schools',
                'alias'  => 'School',
                'type'  => 'LEFT',
                'conditions' => array('School.id = Course.school_id')
            ),
        );

        $school_wise_student_count = $this->Student->find('all', array('fields'=>array('count(Student.id) as total_student','School.name as school_name'), 'joins'=>$joins, 'group'=>array('Course.school_id')));
        pr($school_wise_student_count);
        die;

}
于 2013-07-18T04:39:25.140 に答える