Codeigniter, несколько запросов от контроллера для просмотра - PullRequest
0 голосов
/ 05 января 2019

Попытайтесь заставить мой контроллер вернуть данные из двух запросов, а затем отобразить их для просмотра. Первый запрос приводит к одной записи, упражнению, а второй - ко многим записям, Вопросам.

На мой взгляд не загружаются ни пункты упражнения, ни вопросы упражнения.

Контроллер упражнений:

public function exquestdisplay()
{
  $this->load->model('Exercise_model');

  $data['exquest'] = $this->Exercise_model->get_ex_quest();

  $this->load->view('readeralter/header');
  $this->load->view('readeralter/menu_2');
  $this->load->view('readeralter/dashboard_view');
  $this->load->view('readeralter/play_quiz', $data);
  $this->load->view('readeralter/footer');
}

Модель тренировки:

function get_ex_quest(){
//get exercise's paragraphs
$this->db->select("exercise_id, exercise_difficulty, exercise_title, exercise_par1, exercise_par2, exercise_par3, exercise_par4, exercise_par5, exercise_par6");
$this->db->from("exercises");
$this->db->where("exercise_id","1");

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

//get exercise's questions
$this->db->select("question_id, question_title, question_choice1, question_choice2, question_choice3, question_answer");
$this->db->from("questions");
$this->db->where("question_exercise_id","1");

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

if ($query1->num_rows() < 1 && $query2->num_rows() < 1) {
          echo "There is no data in the database";
          exit();
        }
  elseif($query1->num_rows() == 1 && $query2->num_rows() < 1){
          echo "There is no data in the database";
          exit();
        }
      else {
        $paragraphs = $query1->row();
        $questions = $query2->result();
        return array($paragraphs, $questions);
      }

}

Вид упражнения:

<p><b><?=$row->exercise_id?>.<?=$row->exercise_difficulty?>.<?=$row->exercise_title?></b></p>
<p><?=$row->exercise_par1?></p>
<p><?=$row->exercise_par2?></p>
<p><?=$row->exercise_par3?></p>
<p><?=$row->exercise_par4?></p>
<p><?=$row->exercise_par5?></p>
<p><?=$row->exercise_par6?></p>

<?php } ?>

<?php foreach($exquest['questions'] as $row) { ?>

    <?php $ans_array = array($row->question_choice1, $row->question_choice2, $row->question_choice3, $row->question_answer);?>

    <p><b><?=$row->question_id?>.<?=$row->question_title?></b></p>

    <input type="radio" name="ex_id<?=$row->question_id?>" value="<?=$ans_array[0]?>" required> <?=$ans_array[0]?> &nbsp;
    <input type="radio" name="ex_id<?=$row->question_id?>" value="<?=$ans_array[1]?>"> <?=$ans_array[1]?> &nbsp;
    <input type="radio" name="ex_id<?=$row->question_id?>" value="<?=$ans_array[2]?>"> <?=$ans_array[2]?> &nbsp;
    <input type="radio" name="ex_id<?=$row->question_id?>" value="<?=$ans_array[3]?>"> <?=$ans_array[3]?><br>

<?php } ?>

Ответы [ 2 ]

0 голосов
/ 21 января 2019

возможно, вам стоит попробовать это в вашей модели:

$query1 = $this->db->select('...')->from('...')->where('...')->get();
$query2 = $this->db->select('...')->from('...')->where('...')->get();
0 голосов
/ 05 января 2019

Проблемы, которые я вижу, когда-то исправленные, должны помочь:

Метод select принимает строку имен полей, разделенных запятыми, а не элементы массива.

Итак, вместо этого:

$this->db->select('a','b','c');

Вы должны делать это:

$this->db->select('a, b, c');

Тогда метод where также не используется правильно. Следует принять два параметра.

Итак, где вы используете это:

$this->db->where('a = 1');

Вы должны просто сделать это:

$this->db->where('a', 1);

У вас могут быть другие проблемы, но я вижу, что, по вашему мнению, ваши данные должны быть доступны как объекты запросов $exquest['paragraphs'] и $exquest['questions'], но их нельзя использовать сразу, потому что вы никогда не применяете ->result() или ->row(). Обычно, когда вы делаете запрос, вам нужно проверить, есть ли результаты, поэтому вернитесь в вашу модель и сделайте что-то вроде этого:

$query = $this->db->get();
if( $query->num_rows() > 0 ){
    // you can use the result
    $results = $query->result();
}

Или, если вы ожидали только одну строку:

$query = $this->db->get();
if( $query->num_rows() == 1 ){
    // you can use the result
    $row = $query->row();
}

Эта информация должна помочь вам работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...