1

これが本当に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>
4

1 に答える 1

2

@ Morph_ByteSense - 2 つのオプションがあります。

1) msg​​_participants p は、(送信者だけでなく) スレッド上の他のすべての人を保持するテーブルです。ユーザー テーブルにもう一度参加して、SELECT stmt を拡張できます。

2)(それほど良くはありませんが、ライブラリを拡張する必要はありません)結果で、 foreach() ループを実行して、すべての参加者とクエリの詳細に対してクエリを実行できます

私は最初のオプションをお勧めします - これまで誰もこれを求めたことはありませんでしたが、それは良い機能強化になるかもしれません

于 2013-09-01T10:24:58.423 に答える