使用codeigniter传递多个查询以进行查看

时间:2012-12-07 10:08:53

标签: codeigniter

我正在尝试与Codeigniter建立一个论坛。

到目前为止,基于创建动态新闻教程,我已经显示了论坛并显示了线程。

但这是两个不同的页面,我需要显然将它们显示在一个页面中,如下所示:

Forum 1
- thread 1
- thread 2
- thread 3 
Forum 2
- thread 1
- thread 2 
etc.

然后下一步显然是显示一个帖子中的所有帖子。最有可能进行一些分页。但那是为了以后的事。

现在我有论坛控制器(瘦身版):

<?php
class Forum extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('forum_model');
        $this->lang->load('forum');
        $this->lang->load('dutch');
    }

    public function index()
    {
        $data['forums'] = $this->forum_model->get_forums();

        $data['title'] = $this->lang->line('title');
        $data['view'] = $this->lang->line('view');

        $this->load->view('templates/header', $data);
        $this->load->view('forum/index', $data);
        $this->load->view('templates/footer');
    }

    public function view($slug)
    {
        $data['forum_item'] = $this->forum_model->get_forums($slug);

        if (empty($data['forum_item']))
        {
            show_404();
        }

        $data['title'] = $data['forum_item']['title'];

        $this->load->view('templates/header', $data);
        $this->load->view('forum/view', $data);
        $this->load->view('templates/footer');
    }

}
?>

还有forum_model(也精简了)

<?php
class Forum_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_forums($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query= $this->db->get('forum');
            return $query->result_array();
        }

        $query = $this->db->get_where('forum', array('slug' => $slug));
        return $query->row_array();
    }

        public function get_threads($forumid, $limit, $offset)
    {
            $query = $this->db->get_where('thread', array('forumid', $forumid), $limit, $offset);
            return $query->result_array();
    }


}
?>

和视图文件

<?php foreach ($forums as $forum_item): ?>

    <h2><?=$forum_item['title']?></h2>
    <div id="main">
        <?=$forum_item['description']?>
    </div>
    <p><a href="forum/<?php echo $forum_item['slug'] ?>"><?=$view?></a></p>

<?php endforeach ?>

现在最后一个,我希望有这样的东西:

<?php foreach ($forums as $forum_item): ?>

    <h2><?=$forum_item['title']?></h2>
    <div id="main">
        <?=$forum_item['description']?>
    </div>
    <?php foreach ($threads as $thread_item): ?>

    <h2><?php echo $thread_item['title'] ?></h2>
    <p><a href="thread/<?php echo $thread_item['slug'] ?>"><?=$view?></a></p>

    <?php endforeach ?>

<?php endforeach ?>

但问题是,如何让模型像双重查询一样返回到视图中,以便它包含论坛和每个论坛中的线程。

我试图在get_forum函数中创建一个foreach循环,但是当我这样做时:

public function get_forums($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query= $this->db->get('forum');
            foreach ($query->row_array() as $forum_item)
            {
                $thread_query=$this->get_threads($forum_item->forumid, 50, 0);
            }
            return $query->result_array();
        }

        $query = $this->db->get_where('forum', array('slug' => $slug));
        return $query->row_array();
    }

我收到错误

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: models/forum_model.php

Line Number: 16

我希望有人有一些好的建议,谢谢!

莱尼

* 修改 * **

感谢您的反馈。

我一直很困惑,这似乎现在有效:)

    $query= $this->db->get('forum');
        foreach ($query->result() as $forum_item)
        {
            $forum[$forum_item->forumid]['title']=$forum_item->title;
            $thread_query=$this->db->get_where('thread', array('forumid' => $forum_item->forumid), 20, 0);
            foreach ($thread_query->result() as $thread_item)
            {
                $forum[$forum_item->forumid]['thread'][]=$thread_item->title;
            }
        }
        return $forum;
    }

现在接下来是如何使用foreach语句在视图中显示这个多维数组....

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

您正在使用row_array()因此出错,请将您的get_forums()更改为:

 $thread_query=$this->get_threads($forum_item['forumid'], 50, 0);

但我相信您实际上应该使用result_array(),因为您需要所有论坛的列表。