Codeigniter链接查询。

时间:2013-08-28 12:58:57

标签: php codeigniter controller views models

我很抱歉,如果这是一个真正的n00b问题,但我似乎无法理解这个问题。

我正在使用mahana消息库,我正在尝试创建一些基本视图和基本控制器来发送消息和检索消息。我已经发送了一条消息(正好),我可以在收件人配置文件中查看已发送的消息。

这是我的问题。我希望能够在收件人视图消息页面上显示发送消息的用户的详细信息。这些详细信息存储在users表中。

问题是,如何根据消息传递模型中get_all_threads($ user_id)模型的结果,从我的消息控制器中的view_my_messages函数运行模型查询以获取用户名,头像位置等?

我已经在下面的控制器,视图和模型中包含了代码。

控制器:

function view_my_messages(){
        $this->load->library('mahana_messaging');
        $user_id = $this->session->userdata('id');

        $data['message'] = $this->mahana_model->get_all_threads($user_id);

        $this->load->view('messages/my_messages',$data);

    }

消息模型:

function get_all_threads($user_id, $full_thread = FALSE, $order_by = 'asc')
    {
        $sql = 'SELECT m.*, s.status, t.subject, '.USER_TABLE_USERNAME .
        ' FROM ' . $this->db->dbprefix . 'msg_participants p ' .
        ' JOIN ' . $this->db->dbprefix . 'msg_threads t ON (t.id = p.thread_id) ' .
        ' JOIN ' . $this->db->dbprefix . 'msg_messages m ON (m.thread_id = t.id) ' .
        ' JOIN ' . $this->db->dbprefix . USER_TABLE_TABLENAME . ' ON (' . USER_TABLE_TABLENAME .'.'. USER_TABLE_ID . ' = m.sender_id) '.
        ' JOIN ' . $this->db->dbprefix . 'msg_status s ON (s.message_id = m.id AND s.user_id = ? ) ' .
        ' WHERE p.user_id = ? ' ;

        if (!$full_thread)
        {
            $sql .= ' AND m.cdate >= p.cdate';
        }

        $sql .= ' ORDER BY t.id ' . $order_by. ', m.cdate '. $order_by;

        $query = $this->db->query($sql, array($user_id, $user_id));

        return $query->result_array();
    }

查看:

<div class="row-fluid">

    <div class="span12">
        <div class="well">
            <h3>View Messages</h3>
            <?php foreach($message as $messagefield):?>

            <h4><?php echo $messagefield['subject'];?></h4>

            <?php endforeach; ?>
        </div>
    </div>
 </div>

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

@Morph_ByteSense - 您有两种选择:

1)msg_participants p是保存线程中所有其他人(不仅仅是发件人)的表,您可以再次将用户表连接到该表&amp;扩展您的SELECT stmt

2)(不太好,但你不需要扩展库)你可以做一个foreach()循环并查询所有参与者&amp;查询详情

我会推荐第一个选项 - 我之前从来没有人问过这个问题,但它可能会有很好的提升