アプリケーションでは、講義には多くのスライドがあり、スライドは講義に属します。講義の索引関数を呼び出すときに、特定の講義に属するスライドのオフ量を表示する列を追加したいと思います。
私はこれを次のような講義モデルの$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にアクセスできます。しかし、ビューはこれを処理する場所ではないと感じています。
この目標を達成するためのベストプラクティスは何ですか?