在一个应用程序中,一个讲座有很多幻灯片和幻灯片属于讲座。当讲座的索引功能被调用时,我们想添加一个列,显示属于某个讲座的幻灯片的数量。
我尝试在演讲模型中将其定义为$ 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;
}
我也无法访问当前$讲座对象的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。但我觉得这个观点不是处理这个问题的地方。
实现这一目标的最佳做法是什么?
答案 0 :(得分: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);