1

アプリケーションでは、講義には多くのスライドがあり、スライドは講義に属します。講義の索引関数を呼び出すときに、特定の講義に属するスライドのオフ量を表示する列を追加したいと思います。

私はこれを次のような講義モデルの$virtualFieldsとして定義しようとしました。

public $virtualFields = array(
        'slides_amount' => 'SELECT COUNT(*) AS `count` FROM `eflux`.`slides` AS `Slide` LEFT JOIN `eflux`.`lectures` 
            AS `Lecture` ON (`Slide`.`lecture_id` = `Lecture`.`id`) 
                WHERE lecture_id = \''.$id.'\'')';

問題は、オブジェクトの現在の$ idにアクセスできないため、MySQLがエラーを返すことです。

私の次の試みは、これにコントローラーを使用することでした:

$lectures = $this->Lecture->findByCourseId($course_id);

for ($i = 0; $i < count($lectures); $i++) {
   $slide_amount = $this->Lecture->Slide->find('count', array('conditions' => 'lecture_id = \' '.$id.'\''));
   $slide_amounts[$i] = $slide_amount;
}

また、現在の$ lecture-objectのIDにアクセスして、その講義に属するスライドの量を判別することもできませんでした。

最後に私はビューでそれをしました:

for ($i = 0; $i < count($slides_helper); $i++) {
            if ($slides_helper[$i]['slides']['lecture_id'] == $lecture['Lecture']['id']) {
                echo $slides_helper[$i][0]['count'];
            }   

    }?>

ここでのみ、現在のオブジェクトまたは$lectures配列のIDにアクセスできます。しかし、ビューはこれを処理する場所ではないと感じています。

この目標を達成するためのベストプラクティスは何ですか?

4

1 に答える 1

1

コントローラで、次のことを試すことができます。

$lectures = $this->Lecture->find('all', array('conditions'=>array('Lecture.course_id'=>$course_id)));

foreach ($lectures as &$lecture){
   $lecture['Lecture']['slide_count'] = count($lecture['Slide']);
}
$this->set('lectures', $lectures);

次に、ビューのカウントにアクセスします

foreach ($lectures as $lecture){
    echo $lecture['Lecture']['slide_count'];
}

コードは正確ではない可能性があります...次のコードの結果を貼り付けることで、より正確なコードを提供するのに役立ちます。

これをコントローラーに配置します。

$lectures = $this->Lecture->find('all', array('conditions'=>array('Lecture.course_id'=>$course_id)));
pr($lectures);

苦痛のための編集:

このようなものはあなたのページネーションのために働くかもしれません

$this->paginate['conditions'] = array('Lecture.course_id'=>$course_id);
$this->paginate['limit'] = '10';

$lectures = $this->paginate('Lecture');

//PERFORM THE LOOP TO ADD SLIDE COUNT

$this->set('lectures', $lectures);
于 2013-02-10T13:11:09.850 に答える