2016-09-26 2 views
0

У меня есть эта модель, ниже которой я могу присоединиться к обеим таблицам. Отпечатанные результаты находятся в нижней части вопроса.Codeigniter Join Not Displaying Group By Correct

<?php 

class Forum_model extends CI_Model { 

    public function get_forums() { 
     $this->db->select('f.*, fc.*'); 
     $this->db->from('forum_category fc', 'left'); 
     $this->db->join('forum f', 'f.forum_id = fc.category_forum_id', 'left'); 
     $query = $this->db->get(); 

     if ($query->num_rows() > 0) { 
      return $query->result_array(); 
     } else { 
      return false; 
     } 
    } 
} 

Как всегда, когда я иду смотреть в на мой взгляд, это показывает его как изображение ниже

Два Общие категории новости, зал должны быть отображены на одной панели. По какой-то причине он отображает две общие категории в собственной панели.

Вопрос: Как это possiable, чтобы отобразить эти две категории вместе? Я попытался $this->db->group_by('fc.category_forum_id')

Image

enter image description here

Контроллер

<?php 

class Home extends MY_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->model('reports/thread_analytics_model'); 
     $this->load->model('forum/forum_model'); 
    } 

    public function index() { 

     $results = $this->forum_model->get_forums(); 

     echo "<pre>"; 

     print_r($results); 

     echo "</pre>"; 

     $data['forums'] = array(); 

     foreach ($results as $result) { 
      $data['forums'][] = array(
       'forum_name' => $result['forum_name'], 
       'category_name' => $result['category_name'] 
      ); 
     } 

     $data['content'] = 'common/home_view'; 

     $this->load->view('theme/default/template_view', $data); 
    } 
} 

Посмотреть

<?php foreach ($forums as $forum) {?> 
    <div class="panel panel-home"> 
     <div class="panel-heading"><h1 class="panel-title"><?php echo $forum['forum_name'];?></h1></div> 
     <div class="panel-body"> 
     <table class="table"> 
      <tbody> 
       <tr> 
        <td><?php echo $forum['category_name'];?></td> 
       </tr> 
      </tbody> 
     </table> 
     </div> 
    </div><!-- Panel --> 
<?php }?> 

Результаты печати изображения

enter image description here

ответ

0

Возможное решение с вашим подходом будет:

class Forum_model extends CI_Model { 

    public function get_forums() { 

     $arrGroupedData = array(); 

     $this->db->select('f.*, fc.*'); 
     $this->db->from('forum_category fc'); 
     $this->db->join('forum f', 'f.forum_id = fc.category_forum_id', 'left'); 
     $query = $this->db->get(); 

     if ($query->num_rows() > 0) 
     { 
      foreach($query->result_array() AS $arrCategory) 
      { 
       $arrGroupedData[$arrCategory['forum_id']][] = $arrCategory; 
      } 
      return $arrGroupedData; 
     } else { 
      return false; 
     } 
    } 
} 

Но, на мой взгляд, - вы, вероятно, следует разделить ваши запросы 1 запрос, чтобы получить форумы и 1 запрос, чтобы получить все категории из ваших форумов

и склейте его вместе в древовидной структуре

+0

Данные не отображаются. – user4419336

+0

Я думаю, это потому, что теперь у вас многомерный массив - конечно, вам нужно настроить свой вид - просто распечатайте результат в контроллере, и вы увидите, что я имею в виду, или ваш результат печатается пустым? – sintakonte

0

пример для вас

$forums = array(); 
    $results = array(

     array(
      'forum_name' => 'general', 
      'category_name' => 'news1' 
     ), 
     array(
      'forum_name' => 'general', 
      'category_name' => 'news2' 
     ), 
     array(
      'forum_name' => 'latter', 
      'category_name' => 'news3' 
     ), 


    ); 

foreach ($results as $result) 
{ 
    if(in_array($result['forum_name'],$forums)) 
    { 
     $array = array($result['category_name']); 
     array_push($forums[$result['forum_name']],$array); 
    } 
    else 
    { 
     $forums[$result['forum_name']][] = array(
      'forum_name' => $result['forum_name'], 
      'category_name' => $result['category_name'] 
     ); 
    } 

} 

echo '<pre>'; 
print_r($forums);