2010-04-03 63 views
-1

我需要獲取查詢的行數(這樣我可以對結果進行分頁)。調用一個非對象的成員函數num_rows()

正如我學習笨(和PHP的面向對象),我想嘗試和鏈 - > NUM_ROWS()來查詢,但它不工作:

//this works: 
$data['count'] = count($this->events->findEvents($data['date'], $data['keyword'])); 

//the following doesn't work and generates 
// Fatal Error: Call to a member function num_rows() on a non-object 
$data['count2'] = $this->events->findEvents($data['date'], $data['keyword'])->num_rows(); 

模型返回一個數組的對象,我認爲這就是爲什麼我不能在其上使用方法的原因。

function findEvents($date, $keyword, $limit = NULL, $offset = NULL) 
{ 
    $data = array(); 

    $this->db->select('events.*, venues.*, events.venue AS venue_id'); 
    $this->db->join('venues', 'events.venue = venues.id'); 

    if ($date) 
    { 
     $this->db->where('date', $date); 
    } 

    if ($keyword) 
    { 
     $this->db->like('events.description', $keyword); 
     $this->db->or_like('venues.description', $keyword); 
     $this->db->or_like('band', $keyword); 
     $this->db->or_like('venues.venue', $keyword); 
     $this->db->or_like('genre', $keyword); 
    } 

    $this->db->order_by('date', 'DESC'); 
    $this->db->order_by('events.priority', 'DESC'); 
    $this->db->limit($limit, $offset); //for pagination purposes 
    $Q = $this->db->get('events'); 
    if ($Q->num_rows() > 0) 
    { 
     foreach ($Q->result() as $row) 
     { 
      $data[] = $row; 
     } 
    } 

    $Q->free_result(); 
    return $data; 
} 

有什麼,我可以做到能夠使用它? EG,而不是$ data [] = $ row;我應該使用另一種(OO)語法?

回答

1

您的函數findEvents返回的是您在開始時聲明爲數組的數據。這不是一個對象,並且不允許您使用成員訪問語法來訪問函數。

要數出數組中值的數量看count

而且,從我的理解,你不但要查詢結果返回一個數組,但你希望能夠訪問的結果$方法Q = $ this-> db-> get('events');然而,這是不可能的,因爲這是一個局部變量,它不會被返回。這裏的函數有一個數組的結果類型,不是一個對象,因此不能訪問任何東西,只能是數組。解決方法是返回一個關聯數組:

return array("results" => $data, "count" => $Q->num_rows()); 

然後使用數組語法來訪問計數或結果。另一種選擇是返回一個新的對象,其中包含結果和計數字段,並使用訪問器方法來獲取結果和計數字段。

+0

謝謝ByteMR。正如你所理解的,我是一個兼有codeigniter和OOP的新手,所以很抱歉我的愚蠢問題!然而,我想了解的是:我應該如何修改模型以便返回一個對象而不是數組?而且,我將如何訪問其屬性,例如在foreach循環中? – Patrick 2010-04-03 21:56:09

+0

我會把你的PHP手冊上的課程轉介給你:http://www.php.net/manual/en/oop5.intro.php 基本上你會創建一個具有兩個屬性的類。一個用於數據,另一個用於行計數。我將它命名爲「EventResult」,然後創建一個構造函數來設置這兩個屬性的值。然後你可以這樣做:'返回新的EventResult($ data,$ Q-> num_rows());' – 2010-04-03 23:03:29

相關問題