在一个应用程序中,一个讲座有许多幻灯片,一张幻灯片属于一个讲座。当调用讲座的索引函数时,我们想添加一个列,显示属于某个讲座的幻灯片数量。
我试图将其定义为讲座模型中的 $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'];
}
}?>
只有在这里我才能访问当前对象的 id 或 $lectures 数组。但我觉得视图不是处理这个问题的地方。
实现这一目标的最佳实践是什么?