2014-04-22 19 views
0

我想選擇一些消息排除第4和我提供的foreach一個錯誤 參數無效: 型號:的foreach CI中

public function get_all_news_home() 
{ 
    $exclude = array(); 
    $this->load->database(); 
    $last_news_query = $this->db->query("SELECT * FROM News WHERE Type = 1 AND Ready='Y' ORDER BY Date DESC LIMIT 4"); 
    $last_news = $this->db->query($last_news_query); 
    $last_news = ($last_news->num_rows()) ? $last_news->result_array() : NULL; 
    foreach ($last_news as $ln) 
    { 
     array_push($exclude,array('id' => $ln['ID'])); 
    } 

    $newsIds = implode(',', array_values($exclude)); 


    $all_news = $this->db->query("SELECT * FROM News WHERE News.Ready = 'Y' AND News.ID NOT IN ('$newsIds') ORDER BY Date DESC LIMIT 12"); 

    if($all_news->num_rows()) 
    { 
     $all_news = $all_news->result_array(); 
    } 
    else 
    { 
     $all_news = NULL; 
    } 
    return $all_news; 
} 

控制器:$this->data["all_news"] = &$this->site_news->get_all_news_home();

+0

手動檢查查詢是否得到結果或不.. – Puttu

+0

這是一件很糟糕的事情。你可以很容易地用一個查詢來做到這一點。你有沒有試過這個查詢? –

+0

現在,但如何做他的一個查詢?如果你說與極限(我很抱歉無效) – user3532183

回答

0

改變這一點。在將其傳遞給foreach之前,您應該檢查是否爲null狀態。

public function get_all_news_home() 
{ 
    $exclude = array(); 
    $this->load->database(); 
    $last_news_query = $this->db->query("SELECT * FROM News WHERE Type = 1 AND Ready='Y' ORDER BY Date DESC LIMIT 4"); 
    $last_news = $this->db->query($last_news_query); 
    $last_news = ($last_news->num_rows()) ? $last_news->result_array() : NULL; 
    $all_news = NULL; 
    if($last_news!=NULL){ 
     foreach ($last_news as $ln) 
     { 
      array_push($exclude,array('id' => $ln['ID'])); 
     } 

     $newsIds = implode(',', array_values($exclude)); 
     $all_news = $this->db->query("SELECT * FROM News WHERE News.Ready = 'Y' AND News.ID NOT IN ('$newsIds') ORDER BY Date DESC LIMIT 12"); 

     if($all_news->num_rows()) 
     { 
      $all_news = $all_news->result_array(); 
     } 
    } 
    return $all_news; 
} 
+0

Palani,現在另一個錯誤:消息:preg_match()期望參數2是字符串,對象給定 – user3532183

0
$exclude = array(); 
$this->load->database(); 
$last_news = $this->db->query("SELECT * FROM News WHERE Type = 1 AND Ready='Y' ORDER BY Date DESC LIMIT 4"); 

//$last_news = $this->db->query($last_news_query); 
//remove this line you are re-executing the query. 

$last_news = ($last_news->num_rows()) ? $last_news->result_array() : NULL; 

//before foreach add if condition 
if (!is_null($last_news)) { 
    //add your code 
} 

foreach之前添加if條件始終是一個很好的做法。我希望這會幫助你。

0

我認爲這個簡單的函數應該可以很好地爲你工作。請使用這個簡單的功能,讓我們知道發生了什麼。

public function get_all_news_home() 
{ 
    $this->load->database(); 

    $all_news = $this->db->query("SELECT * FROM News WHERE Type = 1 AND Ready = 'Y' ORDER BY Date DESC LIMIT 4, 12"); 

    if($all_news->num_rows()) 
    { 
     $all_news = $all_news->result_array(); 
    } 
    else 
    { 
     $all_news = NULL; 
    } 
    return $all_news; 
}