1
在一個應用程序中,講座有許多幻燈片和一張幻燈片,屬於一個講座。當講座的索引功能被調用時,我們希望添加一個列來顯示屬於某個講座的幻燈片的數量。定義並訪問cakePHP中的虛擬屬性 - 在哪裏以及如何?
我試圖在演講模式像這樣將其定義爲爲$ 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 determin屬於該演講稿的量。
最後我做到了,在視圖中:
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或$講座陣列。但我覺得這個觀點不是處理這個問題的地方。
達到此目標的最佳做法是什麼?
非常感謝您的回覆。你的代碼是 - 儘管我的sl question問題 - 非常確切。我認爲這個數組被foreach循環改變了,但我用 '$ this-> set('lectures',$ this-> paginate());' 而不是: '$ this-> set ('lectures',$ lectures);' 這導致修改的$講座沒有正確傳遞(?)。也許有人可以給我一個提示,以提高我的理解,並進一步正確使用paginate()函數。 – 2013-02-10 13:35:07
我更新了我的答案......希望這有助於分頁。 – 2013-02-10 13:52:31
再次感謝。此外,我必須在控制器中將deafult查詢條件定義爲'public $ paginate = array(...)'以避免'間接修改重載屬性LecturesController :: $ paginate沒有任何作用[APP \ Controller \ LecturesController.php,第28行]' – 2013-02-10 14:05:46