Недопустимый аргумент для foreach в CodeIgniter

Ниже моя модель, она работает корректно. Прямо сейчас он возвращает false, потому что нет записей для нового студента. Однако в моем контроллере у меня есть оператор If, который проверяет, возвращен ли запрос true, а затем перебирает каждую строку в запросе:

Моя модель:

function get_schedule($Student_ID)
{
    $query = $this -> db -> query("
        getstuff");

    if($query -> num_rows() > 0 )
    {
        $sections= $query->result();        
        return $sections;
    }
    else     
    {           
        return false;
    }
}

Мой контроллер:

$Student_ID = $session_data['Student_ID'];
$query['section']=  $this->grades_model->get_schedule($Student_ID);
$sections= array();

if ($query == TRUE)
{
    foreach($query['section'] as $row)
    {
        do stuff:
    }
}

Проблема в том, что это дает мне недопустимое предупреждение цикла foreach, потому что нет данных для цикла. Как я могу сделать так, чтобы он даже не пытался выполнить этот цикл, если запрос возвращает false. Я попытался добавить elseif($query == FALSE){}, но цикл foreach по-прежнему недействителен.

Что дает, и могу ли я просто подавить это предупреждение?


person Undermine2k    schedule 30.08.2012    source источник
comment
Где вы назначаете $query в контроллере?   -  person Emil Vikström    schedule 30.08.2012
comment
опубликуйте свой полный код контроллера .. откуда берется $query?   -  person Bhuvan Rikka    schedule 30.08.2012
comment
попробуйте print_r результат под <pre> тегами, чтобы увидеть, что возвращает ваш запрос..   -  person mithilatw    schedule 30.08.2012
comment
print_r возвращает массив ( [section] =› )   -  person Undermine2k    schedule 30.08.2012
comment
вопрос не был правильно отформатирован.... он разместил полный требуемый код   -  person Code Prank    schedule 30.08.2012
comment
это не $query['section'] приятель..замените его на $query['sections']..А также измените условие if   -  person Bhuvan Rikka    schedule 30.08.2012


Ответы (5)


Это не "раздел". вы должны оставить то же имя$query['sections']

Попробуй это

 $Student_ID = $session_data['Student_ID'];
 $query['sections']=  $this->grades_model->get_schedule($Student_ID);


 if ($query['sections'] == false)
 {
  echo "error";
 }
 else
 {
  foreach($query['sections'] as $row)
  {
   do stuff:
  }
 }
person Bhuvan Rikka    schedule 30.08.2012

ПЫТАТЬСЯ

Модель

function get_schedule($Student_ID)
{
    $query = $this -> db -> query("
        getstuff");

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

    else     
         {          
        return false;
         }
}

Контроллер:

$this->load->model("Model_name");
$var=$this->Model_name->get_schedule($Student_ID);
if ($var)
 {
  foreach($var as $row)
 {
  do stuff:
 }
}

РЕДАКТИРОВАТЬ:

Обязательно измените Model_name на свое и запросите в своей модели.

person WatsMyName    schedule 30.08.2012

Эта строка if ($query == TRUE) не имеет особого смысла, попробуйте проверить содержимое, например:

if (isset($query['section']) && count($query['section']) > 0) {
    foreach ($query['section'] as $row) {
        // do stuff:
    }
}
person Community    schedule 30.08.2012

Попробуйте так

foreach($query as $row)
 {
     do stuff:
 }

если ваш $query представляет собой массив. Я думаю, что функция модели возвращает массив в вашем случае.

а также вы сделали ошибку в

foreach($query['sections'] as $row)     //you did it 'section' try change it
{
    do stuff:
}

принять ответ, если он полезен

person Gautam3164    schedule 30.08.2012

Вы делаете это неправильно $this->db->query() используется для запросов sql. Вы можете использовать $this->db->query('select * from getstuff'); или $this->db->get('getstuff');

person Code Prank    schedule 30.08.2012
comment
Запрос правильный, его формат прямо с сайта CI. - person Undermine2k; 30.08.2012
comment
@ShayanHusaini, это был пример, см. Контроллер внутри цикла foreach есть фиктивный текст do stuff: - person WatsMyName; 30.08.2012
comment
Может быть, вы, ребята, пишете ... я предложил то, что я нашел неправильным ... это очень распространенные ошибки программистов, если вам не нравится мой ответ, вы можете проголосовать за мой ответ. - person Code Prank; 30.08.2012