Codeigniter: Как извлечь разные данные столбца из внешней таблицы, используя идентификатор внешнего ключа?

#php #sql #ajax #codeigniter

#php #sql #ajax #codeigniter

Вопрос:

Я смог успешно извлечь данные из следующей таблицы. Однако в столбце «Классный руководитель» я хочу, чтобы имя учителя было вместо идентификатора учителя (внешний ключ) введите описание изображения здесь

Это таблица базы данных

введите описание изображения здесь

Вот как я извлекаю данные в представлении класса

 if( !empty($class_data) ) {
                                    foreach ($class_data AS $row) {
                                        ?>
                                        <tr>
                                            <td><?php echo $row->class_id; ?></td>
                                            <td><?php echo $row->grade; ?> </td>
                                            <td><?php echo $row->name; ?></td>
                                            <td><?php echo $row->capacity; ?></td>

                                            <td> <?php echo $row->teacher_id; ?></td>
  

мой контроллер

 function index()
{

    $teacher_data= $this->Tableview_model->fetch_teacher_data();
    $class_data = $this->Tableview_model->fetch_class_data();

    $data["teacher_data"]  =  $teacher_data;
    $data["class_data"]  =  $class_data;


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

function add_class()
{
    $class_data = array( 
        'class_id' => '',
        'grade' => $this->input->post('grade'),
        'name' => $this->input->post('class_name'),
        'capacity' => $this->input->post('capacity'),
        'teacher_id' => $this->input->post('class_teacher'),

    );


    $insert = $this->Model_Action->insertTable('class',$class_data);

    echo json_encode(array("status" => TRUE));


}
  

таблица базы данных учителя

СОЗДАЙТЕ ТАБЛИЦУ, teacher ( teacher_id АВТОИНКРЕМЕНТ int(11) НЕ равен НУЛЮ, t_f_name varchar(250) НЕ РАВЕН НУЛЮ, t_last_name varchar(250) НЕ РАВЕН НУЛЮ, DOB дата НЕ РАВНА НУЛЮ, t_email varchar(250) НЕ РАВНА НУЛЮ, t_address varchar(500) НЕ РАВНА НУЛЮ, t_tel varchar(150) НЕ РАВНА НУЛЮ, t_username varchar(250) НЕ РАВНА НУЛЮ, t_password varchar(500) НЕ РАВНА НУЛЮ, qualifications varchar(5000) НЕ РАВНА НУЛЮ , t_date_of_join дата НЕ РАВНА НУЛЮ, t_date_of_leaving дата НЕ РАВНА НУЛЮ, t_current_status int(1) НЕ РАВНО НУЛЮ, ПЕРВИЧНЫЙ КЛЮЧ ( teacher_id ) ) ENGINE=InnoDB AUTO_INCREMENT=8 КОДИРОВКА ПО УМОЛЧАНИЮ = latin1

Функция Model fetch_class_data модели

   function fetch_class_data()
  {
    $this->db->select("*");
            $this->db->from('class');

            $query=$this->db->get();

        if($query->num_rows() > 0) 
        {
            return $query->result();


        }else{
            return false;
        }


  }
  

Комментарии:

1. Можете ли вы поделиться teachers структурой таблицы и кодом функции модели?

2. Я обновил вопрос таблицей учителей и кодом функции модели

3. Ответ приведен ниже. Вам нужно использовать объединение, чтобы получить имя преподавателя.

Ответ №1:

Вам нужно использовать JOIN between class и teacher table. Пожалуйста, измените код вашей модели на:

 $this->db->select('c.*, t.t_f_name, t.t_last_name')
         ->from('class c')
         ->join('teacher t', 'c.teacher_id = t.teacher_id');
$query = $this->db->get();
  

Используйте t_f_name и t_last_name в вашем представлении в качестве полного имени путем их объединения

Итак, замените

 <td><?php echo $row->teacher_id; ?></td>
  

с

 <td><?php echo $row->t_f_name . " " . $row->t_last_name; ?></td>