Codeigniter - 使用模型中查询结果的id来查询同一模型中的不同函数

时间:2013-04-02 14:28:46

标签: php codeigniter function model

我正在使用codeigniter来编码我的网站,而且我遇到了障碍。我知道如何在常规的非MVC中做到这一点,而不是OOP PHP,但我在Codeigniter中苦苦挣扎。

我有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()函数的正确值。

任何指导都将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要为get_stats中收到的三个条目中的每个条目致电get_blog_last。如果是这种情况,只需将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;
}

答案 1 :(得分: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