2016-08-25 101 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

好吧,我已经检查了我自己的答案,发现如果老师有很多学生,它只会返回最后一个学生。我会给你另一种选择。 –