Недопустимый аргумент, предоставленный для foreach() из-за того, что var_dump имеет значение null

Вчера, когда я var_dump($this->m_test->result_getGrades());он дал мне массив[1356], теперь он вернул ноль. Может ли кто-нибудь помочь мне понять, почему это NULL? Я все еще новичок в PHP и Codeigniter, и мне довольно сложно понять, почему я не могу получить какие-либо данные из своей базы данных.

Я предполагаю, что причина, по которой у меня есть эта ошибка, потому что ($this->m_test->result_getGrades()) равно NULL

Произошла ошибка PHP

Серьезность: предупреждение

Сообщение: Недопустимый аргумент для foreach()

Имя файла: views/v_display.php

Номер строки: 7

Кроме того, по каким причинам я не могу получить какие-либо данные из своей базы данных? Для будущих ссылок

Это мой код:

Контроллер c_test.php

function getGrades() {
       $data['query'] = $this->m_test->result_getGrades(); 
       $this->load->view('v_display', $data);
    }

Модель m_test.php

function result_getGrades()
    {
          $this->db->select('grades.blockcode,subjectblocking.subjectcode,subjects.description,grades.final');
          $this->db->from('grades');
          $this->db->join('subjectblocking','grades.blockcode=subjectblocking.blockcode');
          $this->db->join('subjects','subjectblocking.subjectcode=subject.subjectcode');
          $this->db->where('2013-F019');
          $query=$this->db->get();          
    }

Просмотры v_display.php

<?php foreach ($query as $row): ?>

               <?php echo $row->studentid;?><br>
               <?php echo $row->subjectcode;?><br>
               <?php echo $row->description;?><br>
               <?php echo $row->final;?><br>


         <?php endforeach; ?>

Спасибо еще раз! :)


person Natty Guurl    schedule 16.01.2015    source источник
comment
Я не знаю CodeIgniter, но, возможно, вы получаете NULL из-за самого запроса, возможно, эту проблему вызывает условие where или соединения.   -  person Claudio Ludovico Panetta    schedule 16.01.2015


Ответы (3)


В вашей функции result_getGrades() много ошибок:

function result_getGrades()
{
    $this->db->select('grades.blockcode,subjectblocking.subjectcode,subjects.description,grades.final');
    $this->db->from('grades');
    $this->db->join('subjectblocking','grades.blockcode=subjectblocking.blockcode');
    $this->db->join('subjects','subjectblocking.subjectcode = subjects.subjectcode');
    $this->db->where('your_field', '2013-F019');

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

    return $query;        
}

Там было :

  • добавить return $query;

  • field name в ваших предложениях where

  • от subject до subjects в вашем присоединении
person Macks    schedule 16.01.2015
comment
все равно выдает ошибку Fatal error: Call to a member function result() on a non-object - person Natty Guurl; 16.01.2015
comment
Я думаю, что это $this->db->where('2013-F019'); ложно, синтаксис предложения where $this->db->where('yourcolum', 'yourvalue'); - person Macks; 16.01.2015
comment
хорошо, я попробовал запросить его без предложения where, он все тот же - person Natty Guurl; 16.01.2015
comment
В строке $this->db->join('subjects','subjectblocking.subjectcode=subject.subjectcode'); замените subject на subjects - person Macks; 16.01.2015

Вы должны попробовать это:

Во-первых, вам нужно будет проверить пункт where.

см. пример ниже:

$this->db->where('name', 'test');

это создаст WHERE name = 'test' в запросе MySQL

тогда вам нужно поместить оператор возврата после вашего метода get():

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

поэтому ваша модель должна быть примерно такой:

function result_getGrades()
{
      $this->db->select('grades.blockcode,subjectblocking.subjectcode,subjects.description,grades.final');
      $this->db->from('grades');
      $this->db->join('subjectblocking','grades.blockcode=subjectblocking.blockcode');
      $this->db->join('subjects','subjectblocking.subjectcode=subject.subjectcode');

      $this->db->where('name of field', '2013-F019');

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

      return $query->result_array();        
}
person soedjarwoAli    schedule 16.01.2015
comment
Я удалил предложение where и добавил return $query->result_array();, однако произошла ошибка, такая как «Вызов функции-члена result_array() для не-объекта» - person Natty Guurl; 16.01.2015

var, выгружающий сам запрос, обычно не дает мне многого, но это зависит от того, когда вы его сбрасываете.

<?php foreach ($query as $row): ?>

           <?php echo $row->studentid;?><br>
           <?php echo $row->subjectcode;?><br>
           <?php echo $row->description;?><br>
           <?php echo $row->final;?><br>


     <?php endforeach; ?>

Для этого вам не нужно открывать и закрывать теги php, если вы не хотите, чтобы вокруг него было много html:

<?php foreach ($query as $row){

           echo $row->studentid.'<br>';
           echo $row->subjectcode.'<br>';
           echo $row->description.'<br>';
           echo $row->final.'<br>';


     }?>

Обратите внимание на . ? Он объединяет $row->studentid с html, что означает более чистый код.

Теперь о вопросе: вы назначаете переменную в качестве переменной в вашем foreach... Что бессмысленно. К счастью, я знаю исправление. Вам нужно превратить запрос в результат из вашей базы данных:

<?php foreach ($query->result() as $row){

           echo $row->studentid.'<br>';
           echo $row->subjectcode.'<br>';
           echo $row->description.'<br>';
           echo $row->final.'<br>';


     }?>

$query->result() as $row позволит вам вывести информацию, полученную из базы данных.

Также в конце модели вам нужно добавить return $query; иначе ваша модель получает данные и ничего с ними не делает.

person Community    schedule 16.01.2015
comment
добавил return $query->result_array();, однако произошла ошибка, такая как «Вызов функции-члена result_array() для не-объекта» - person Natty Guurl; 16.01.2015
comment
У вас есть $this->load->database в вашей конструкции для каждой используемой модели/контроллера? - person ; 16.01.2015