2013-08-28 3 views
1

Je suis désolé si c'est une question vraiment n00b mais je ne peux pas sembler avoir la tête autour de ce problème. J'utilise la bibliothèque de messages mahana et j'essaie de créer des vues de base et le contrôleur de base pour envoyer un message et récupérer des messages. J'ai envoyé un message cloué (à peu près) et je peux voir le message envoyé sur le profil des destinataires.Codigniter reliant les requêtes.

Ceci est mon problème. Je veux être en mesure de montrer les détails de l'utilisateur qui a envoyé le message à côté du message envoyé sur la page de message de vue des destinataires. Ces détails sont stockés dans la table des utilisateurs. La question est: comment exécuter une requête de modèle pour obtenir le nom d'utilisateur, l'emplacement de l'avatar, etc. à partir de la fonction view_my_messages dans mon contrôleur de messages, basé sur le résultat du modèle get_all_threads ($ user_id) dans le modèle de messagerie?

J'ai inclus le code provenant du contrôleur, de la vue et du modèle ci-dessous.

Controller:

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); 

    } 

message Modèle:

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(); 
    } 

Vue:

<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> 

Merci pour votre aide!

+0

voir http://ellislab.com/codeigniter/user-guide/database/active_record.html joindre le paragraphe, il vous aidera –

+0

@DesertP ne pas «JOIN». $ this-> db-> dbprefix. USER_TABLE_TABLENAME. 'ON ('. USER_TABLE_TABLENAME. '.'. USER_TABLE_ID. '= M.sender_id)'. 'Fait déjà cela? –

Répondre

2

@Morph_ByteSense - vous avez deux options:

1) msg_participants p est la table qui contient toutes les autres personnes sur le fil (et pas seulement l'expéditeur), vous vous pouvez rejoindre la table des utilisateurs une fois de plus à cette & étendre votre SELECT stmt

2) (pas aussi bon, mais vous n'avez pas besoin d'étendre la bibliothèque) dans votre résultat, vous pouvez faire une boucle foreach() et l'interrogation sur tous les participants & détails de la requête

Je recommanderais la première option - Je n'ai jamais eu quelqu'un demander cela auparavant, mais il pourrait faire une bonne amélioration