0

我有一个页面,显示所有学生资料及其结果。我把所有用户信息都放在“用户”表中,然后我有另一个表“结果”,显示所有学生在不同课程中的分数。问题是我不知道如何编写查询或控制器函数来将学生与其相应的结果联系起来。我需要一些帮助谢谢

控制器

        function students()  
        {  
            $data = array(); 
            $this->load->model('kdg_model');
            $query = $this->kdg_model->get_students();
            $query2 = $this->kdg_model->get_resultStudent();
                if ($query)
                {
                    $data['user'] = $query;
                    $data['results'] = $query2;
                }

                $this->load->view('students_view',$data);

        } 

模型

get_students 从数据库表用户获取所有行。get_resultstudent 从结果中获取所有行。试图将它们结合起来,但它只是让我在每个配置文件中返回所有相同的行。

         function get_students(){
            $this->db->where('admin', 0);
            $query = $this->db->get('user');  
            return $query->result();
         }
         function get_resultStudent(){
            $this->db->select('*');
            $this->db->from('results');
            $this->db->join('user', 'user.id_user = results.FK_student');
            $query = $this->db->get(); 
            return $query->result();
         }
4

1 回答 1

0

我不确定您的数据库架构是什么样的,但据我所知,我已经知道了。好的,所以在您的控制器中,您想要构建您的学生数组。让我们通过调用两个模型函数来做到这一点。我们将要调用的第一个模型函数让我们获得了“用户”表中的所有学生。该模型会将一个数组传回给控制器,我们可以循环访问该数组以获取各个学生。在循环的每次迭代中,我们可以将“id_user”传递给模型中的另一个函数,以获得该学生的结果。

//This is where we will store the students and their results
$aData['aStudentResults'] = array(); 

//Load the model we need
$this->load->model('kdg_model');

//Get an array of students
$aStudents = $this->kdg_model->get_students();

//Now we have an array of student id's let loop through these and for each student
//let get their results
foreach($aStudents as $student)
{
    //Add the student to the array
    //The student id (id_user) is the key
    $aData['aStudentResults'][$student->id_user] = $this->kdg_model->get_resultStudent($student->id_user);
}

//Pass out array of students to the view
$this->load->view('students_view', $aData);

这些是我们在控制器中调用的模型函数

//Get all the students that are not admins
function get_students(){
    $this->select('id_user')
        -from('user')
        ->where('admin', 0);
    $query = $this->db->get();  
    return $query->result();
}

//Use the id_user we were passed by the controller to get the results
function get_resultStudent($id_user){
    $this->db->select('*');
    $this->db->from('results');
    $this->db->where('FK_student', $id_user);
    $query = $this->db->get(); 
    return $query->result_array();
}

至此,我们现在拥有了我们需要的所有数据。我们只需要将它从控件传递到我们通过传递视图 $aData 所做的视图。在我们看来,我们可以像这样访问我们传递给它的内容

<? foreach($aStudentResults as $studentId => $aResults): ?>
    <p>Student id: <?= $studentId ?></p>

    <?foreach($aResults as $aResult): ?>
        //Do something with results
    <? endforeach; ?>
<? endforeach; ?>

这尚未经过测试,因此可能存在一些语法错误,但希望您应该了解我正在尝试做什么以及您需要做什么。

了解 MVC 的工作原理对您很重要。在模型中练习从数据库中选择的数据,然后通过控制器将该数据传递给您的视图。你会很快掌握它的窍门。

如果您在此答案中有任何不明白的地方,请发表评论并告诉我。

于 2013-08-20T15:55:27.783 回答