2013-04-02 41 views
0

我正在使用codeigniter來編碼我的網站,並且正遇到包版廣告。我知道如何在常規的,非「MVC」中執行此操作,而不是OOP PHP,但是我在Codeigniter中苦苦掙扎。Codeigniter - 使用模型中的查詢結果中的id在同一模型中的不同功能中查詢

我有blog_model.php,它有一個函數可以從我的數據庫中檢索日期時間,將它分解爲一個數組,以便我可以在模型之外使用它,並將它提供給CSS,其中有單獨的日曆圖標。每個日曆圖標由視圖中的月份編號加載(<div class='calendar-icon-$stats['date'])。此函數還會從該單個帖子中提取大量註釋並將其輸出到數組中,以便我可以在視圖中顯示它。

public function get_stats($id) { 
    $this->db->select('id,datetime')->from('blog_posts')->where('id',$id); 
    $dquery = $this->db->get(); 
    $dquery = $dquery->row_array(); 
    $date = date('Y-m-d', strtotime($dquery['datetime'])); 
    $stats = explode("-", $date); // This makes $stats[0] the year, $stats[1] the month and $stats[2] the day. 
    $stats['time'] = date('H:i', strtotime($dquery['datetime'])); 
    $stats['comcount'] = $this->db->get_where('blog_comments', array('blogid' => $id)); 
    $stats['comcount'] = $stats['comcount']->num_rows(); 
    return $stats; 
} 

還有檢索最近三個條目的功能:

public function get_blog_last() { 
    $query = $this->db->order_by('id desc')->get('blog_posts',3); 
    return $query->result_array(); 
} 

此代碼,然後裝入我的控制器,併發送至視圖中顯示:

$data['blog'] = $this->blog_model->get_blog_last(); 
$data['stats'] = $this->blog_model->get_stats($data['blog']); 
$this->load->view('index',$data); 

我面臨的問題是如何獲取get_stats()函數以運行我在索引頁上顯示的最後三個條目的每個條目。到目前爲止,我只能讓它運行其中的一個,因此我頭版上的所有三個條目具有相同的日期,相同的時間和相同數量的評論。我認爲將代碼放入模型中可以避免我在重新載入歸檔頁面(顯示所有月份的帖子)和主入口頁面時顯示該條目及其註釋的情況。

所以,在這裏最終的問題是:

  • 如何運行某個網頁上的每個項目我有get_stats?

我也有點問題找出傳遞給我的get_stats()函數的正確值。

任何指導,將不勝感激。先謝謝你。

回答

1

如果我的理解正確,您需要爲get_blog_last中收到的三個條目中的每一個調用get_stats。如果是這樣的話,只是改變get_blog_last這樣:

public function get_blog_last() { 
    $query = $this->db->order_by('id desc')->get('blog_posts',3); 
    $entries = $query->result_array();   // get the latest entries array 
    foreach ($entries as $index => $entry) { // loop through those entries 
    $stats = $this->get_stats($entry['id']); // call this model's `get_stats` method 
    $entries[$index]['stats'] = $stats;  // add a `stats` key to the entry array 
    } 
    return $entries; 
} 
+0

胡說。太簡單了!我覺得很愚蠢。非常感謝! – Jguy

0

你爲什麼不把

$this->blog_model->get_stats($data['blog']); 

內循環? (我寧願使用正常循環)

例如:

$stat_list = array(); 
for($i=0;$i<count($data['blog']);$i++){ 
    $stat_list[] = $this->blog_model->get_stats($data['blog'][$i]); 
} 
$data['stats'] = $stat_list; 

,並在你看來,你應該嘗試在同一打印出每個$stat_list

相關問題