Codeigniter,从控制器到视图的多个查询

时间:2019-01-05 13:29:21

标签: codeigniter

尝试让我的控制器从两个查询返回数据,然后显示它们以供查看。第一个查询的结果为一个记录,即练习,第二个查询的结果为多个记录,即问题。

我的看法既不加载练习的段落,也不加载练习的问题。

运动控制器:

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 :(得分:0)

我看到的问题,一旦解决,该问题将有所帮助:

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']来使用,但是它们不能立即使用,因为您从未应用{ {1}}或->result()。通常,在执行查询时,您将需要检查是否有结果,因此请回到模型中,执行以下操作:

->row()

或者如果您只期望一行:

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

这些信息应该可以帮助您正常工作。

答案 1 :(得分:0)

也许您应该在模型中尝试一下:

$query1 = $this->db->select('...')->from('...')->where('...')->get();
$query2 = $this->db->select('...')->from('...')->where('...')->get();