我有一个模型,该模型具有查询学生注册的科目的功能。
public function getAllSubjects($username){
$this->db->select('student.username, subjects.subject_name, teacher.firstname as TeachersFirstName, teacher.surname as TeacherSurname');
$this->db->from('users student');
$this->db->join('student_subjects', 'student.username = student_subjects.student_username', 'inner');
$this->db->join('subjects', 'student_subjects.subject_id = subjects.subject_id', 'inner');
$this->db->join('users teacher', 'subjects.teacher_username = teacher.username', 'inner');
$this->db->where('student.username', $username);
$studentSubjQuery = $this->db->get('users');
return $studentSubjQuery->result_array();
}
在控制器中,我从模型中调用函数,并将返回的数组存储到数据中,并将其传递给视图。现在,当我尝试打印数组时,行在数组中存储两次。下面是打印出来的数组:
Array
(
[0] => Array
(
[username] => dirkjan021
[subject_name] => Chemistry
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[1] => Array
(
[username] => dirkjan021
[subject_name] => Chemistry
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[2] => Array
(
[username] => dirkjan021
[subject_name] => Physics
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[3] => Array
(
[username] => dirkjan021
[subject_name] => Physics
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
)
控制器代码:
public function acads()
{
if (!$this->session->userdata('username')) {
// Redirect to homepage
redirect('../');
} else {
// Allow Access to User's Acads
$data['userInfo'] = $this->session->all_userdata();
// Query User Subjects
$this->load->model('usersubject_model');
$data['userSubjects'] = $this->usersubject_model->getAllSubjects($this->session->userdata('username'));
$this->load->view('view_userAcads', $data);
}
}
更新:下面是根据'$this->output->profiler(TRUE)'的查询:
SELECT `student`.`username`, `subjects`.`subject_name`, `teacher`.`firstname` as TeachersFirstName, `teacher`.`surname` as TeacherSurname
FROM (`users` student, `users`)
INNER JOIN `student_subjects` ON `student`.`username` = `student_subjects`.`student_username`
INNER JOIN `subjects` ON `student_subjects`.`subject_id` = `subjects`.`subject_id`
INNER JOIN `users` teacher ON `subjects`.`teacher_username` = `teacher`.`username`
WHERE `student`.`username` = 'dirkjan021'
我现在明白了。模型查询最初"查询两次"FROM ('users' student, 'users'),因为我有这两行:$this->db->from('users' student);
$this->db->get('users');
我所做的是我删除了db->从和编辑db->get
到db->get('users' student);