2016-08-25 105 views
5

到控制器我有3個表無法從模型獲取整個數據值笨

學生

id s_name 
1  S1 
2  S2 

student_subject

id s_id subject 
1 1  english 
2 1  science 
3 2  mathematics 
4 2  poetry 

老師

id t_id s_id 
1 1 1 
2 1 2 

我我正在努力爲老師提供一個儀表板,他可以看到他下面的所有學生和學生所關注的科目。 我這是在控制器被攜帶(如t_id),然後在模型中老師的ID,從那裏我從老師表,並通過這個s_id得到學生的ID(如$s_id)我希望得到來自student表和student_subject表的詳細信息。

,我現在所面臨的問題是

1)在這個模型中,我能夠看到學生表的所有細節,但是當我返回值到控制器,然後查看我得到的細節只有1名學生。

2)在這個模型中,伴隨着學生的詳細信息,我也希望從student_subject表中返回特定學生的主題,但是我不知道如何返回2個值(即學生的詳細信息和主題的詳細信息)從1模型1控制器,然後可以查看我下面是

控制器

public function dashboard($t_id) 
     { 
      $data['student_request'] = $this->student_model->student_detail($t_id); 
      $this->load->view('teacher/dashboard_view',$data); 
     } 

模型

代碼

public function student_detail($t_id) 
    { 
     $query = $this->db->query("SELECT * FROM teacher where t_id = $t_id"); 

     foreach ($query->result_array() as $row) 
      { 
        $s_id = $row['s_id']; 

        $new_query = $this->db->query("SELECT * FROM student where id = $s_id"); 
        $s = $new_query->result_array(); 
        //print_r ($s); // just to check the data 
        return $s; 
      } 
    } 

查看

<?php 
foreach ($student_request as $row) 
    { 
     echo $row['s_name']; 
    } 
?> 

真的很感激,如果有人可以幫助我的問題

+0

您好我編輯我的回答,我在模型中加入了更多的功能,我的路是僅將該模型用作數據庫連接而不是用於功能。我想你也會這麼喜歡。 –

+0

這也是在codeigniter模型中編碼的一種乾淨方式:) –

回答

1

保持控制器代碼相同,並更改模型和視圖

型號

$this->db->select(' 
     teacher.s_id, 
     student.s_name, 
     student_subject.subject 
    '); 

$this->db->from('teacher'); 
$this->db->join('student','student.id = teacher.s_id'); 
$this->db->join('student_subject','student_subject.s_id = teacher.s_id'); 
$this->db->where('teacher.t_id',$t_id); 

$query = $this->db->get(); 
if($query->num_rows() < 1) 
    { 
     return FALSE; 
    } 

    return $query->result(); 

查看

<?php if($student_request): ?> 

    <?php foreach($student_request as $request): ?> 

    <?php 
    echo $request->subject; 
    echo $request->s_name; 

    ?> 

    <?php endforeach; ?> 

    <?php endif; ?> 
+0

沒有意識到它可能是那麼簡單,解決了我所有的問題 – Sam

1

不要把return內循環。它會立即終止循環。只要創建循環外的臨時容器,然後推動它裏面的數據,最後返回:

基本思想:

public function student_detail($t_id) 
{ 
    $data = array(); // initialzie container 
    $query = $this->db->query("SELECT * FROM teacher where t_id = $t_id"); 
    $results = $query->result_array(); 
    foreach ($results as &$row) { 

      $s_id = $row['s_id']; 
      $new_query = $this->db->query(" 
       SELECT s.s_name, ss.subject FROM student s 
       JOIN student_subject ss ON s.id = ss.s_id 
       WHERE s.id = $s_id 
      "); 
      $s = $new_query->result_array(); 

      $row['student_data'] = $s; // push it here 

      // return $s; // DONNT PUT RETURN HERE! 
    } 

    $data = $results; 
    return $data; 
} 

或者你可以使用一個查詢:

public function student_detail($t_id) 
{ 
    return $this->db->query(" 
     SELECT t.t_id, s.s_name, ss.subject 
     FROM student s 
      JOIN teacher t ON t.s_id = s.id 
      JOIN student_subject ss ON s.id = ss.s_id 
     WHERE t.t_id = {$t_id} 
     ") 
     ->result_array(); 
} 
+0

試過你的方法,但是我在模型本身中得到了空數組,並且我還需要來自student_subject表的數據 – Sam

+0

@Sam我忘記了編輯,嘗試了它再次 – Ghost

+0

通過返回數據中的結果它顯示數組中的老師表的值,但是我需要學生表和student_subject表數據 – Sam

1

編輯

功能

public function dashboard($t_id) 
{ 
    $data['student_request'] = $this->student_model->student_detail($t_id); 
    foreach($data['student_request'] as $row) 
    { 
     $s_id = $row['s_id']; 
    } 
    $data['final_details'] = $this->student_model->get_students($s_id) 
    $this->load->view('teacher/dashboard_view',$data); 
} 

模型

public function student_detail($t_id) 
{ 
    $this->db->select('*'); 
    $this->db->from('teacher'); 
    $this->db->where('t_id',$t_id); 
    $query = $this->db->get(); 
    return $query->result_array(); 
} 

public function get_students($s_id) 
{ 
    $this->db->select('*'); 
    $this->db->from('student as s'); 
    $this->db->join('student_subject as ss', 's.id = ss.s_id'); 
    $this->db->where('s.id',$s_id); 
    $query = $this->db->get(); 
    return $query->result_array(); 
} 

VIEW

您現在可以使用

foreach($final_details as $row) 
{ 
    echo $row['YOUR_COLUMNS']; 
    echo $row['s_name'] . ' ' . $row['s_id'] . ' ' . $row['s_subject']; 
} 

我利用codeigniters AR爲您提供方便。我可以幫助更多的,如果你不能跟這麼多

編輯

好吧,我已經審查我自己的答案,發現如果老師有很多學生,它只會返回最後一個學生。我會給你另一種選擇。

我發現,課程的老師可以有多個學生,所以這裏是一個代碼,以獲得他們所有的人。

功能

public function dashboard($t_id) 
{ 
    $data['student_request'] = $this->student_model->student_detail($t_id); 
    $data['final_details'] = array(); 
    foreach($data['student_request'] as $key => $value) 
    { 
     $s_id = $row['s_id']; 
     $data['final_details'][] = $this->student_model->get_students($s_id) 
    } 
    $this->load->view('teacher/dashboard_view',$data); 
} 

現在你需要知道的唯一的事情就是如何通過$關鍵=> $值迭代。

PHP指南有很多幫助。

+0

s_name是我的學生表的列,並且伴隨主題我還需要顯示s_name – Sam

+0

好的,我編輯我的答案 –

+0

好吧,我已經檢查了我自己的答案,發現如果老師有很多學生,它只會返回最後一個學生。我會給你另一種選擇。 –