2011-12-24 44 views
0

我創建一個新的模型類作爲my_model.php/models文件夾內,並在其內部的函數來加載所有元素模型誤差:

function get_all(){ 
    $query = $this->db->get('test'); //test is my table 
    return $query->result(); 
} 

在控制器中,我實例化的類和調用的方法;

$this->load->model('my_model'); 
$res = $this->my_model->get_all(); 

但是,這將引發我錯誤說:

Fatal error: Call to a member function get() on a non-object in /var/www/testapp/application/models/my_model.php on line 7

這條線7分的地方,我已經使用$this->db代碼的部分。我試圖看到$db的值,但我認爲它是魔法訪問器__get__set,所以在調用該方法之前我看不到此屬性的值。

我試過Google搜索其他幾個案例,但沒有一個匹配我的場景,而沒有一個能夠解決我的問題。

回答

5

您必須加載數據庫第一

$this->load->database(); 

因此,所有代碼:

function get_all(){ 
    $this->load->database(); 
    $query = $this->db->get('test'); //test is my table 
    return $query->result(); 
} 

或者,加載數據庫您__construct方法。

IMO,最好自動加載數據庫,通過更改application/config/autoload.php,示例如下。

$autoload['libraries'] = array('database','form_validation'); //form_validation is for example only 
+1

如果是這種情況,那麼錯誤就會是''undefined property'db'...「'或加載模型失敗。 – 2011-12-24 16:57:50

+1

是的,現在我得到了線索,我沒有做$ this-> load-> database()。我沒有在codeigniter文檔中的任何地方找到它。所以,它現在的作品,謝謝。 – Sandeep 2011-12-24 17:09:14

+0

@Madmartigan我不這麼認爲,PHP解釋器在沒有找到'get'後會退出,因爲它是致命錯誤,不會提供'Notice'(如果db是一個未定義的屬性)。 – Usman 2011-12-24 17:10:54

2

你的錯誤其實很簡單:

return $query->result; 

應該是:

return $query->result(); 

有時由PHP錯誤報告的行號是不是正是你認爲它是一個,解析器只是做的最好,並報告發現錯誤的地方。

還有一個問題:

$res = $this->my_model->getAll(); 

應該是:

$res = $this->my_model->get_all(); 

你叫由錯誤的名稱自己的函數。

+0

實際上這些並不是錯誤的。我的代碼一切正常,但這可能發生在趕時間發佈。我仍然得到同樣的錯誤。 而是在實際的代碼中,我沒有返回任何東西來檢查,所以做了像$ this-> db-> get('test')之類的東西,並調用了這個方法,但它給了我錯誤。所以,我認爲這個錯誤應該在這一行。 – Sandeep 2011-12-24 16:54:01

+1

我認爲錯誤在這個'$ query = $ this-> db-> get('test');'。 – Usman 2011-12-24 16:56:09

+1

@瘋狂-36:如果你在急匆匆地發帖,也許你正在編寫匆忙。儘量減慢一點並注意。我們可以看到整個模型類和控制器方法代碼嗎? – 2011-12-24 17:00:46

3

在CodeIgniter中,您應該在使用它之前加載數據庫模型。 使用$this->load->database();加載數據庫模型。

+1

謝謝,這就是我所缺少的。 – Sandeep 2011-12-24 17:09:37