2011-06-20 55 views
2

首先Model類:

class Xxxx_model extends Model 
    { 
     function XxxxModel() 
     { 
     parent::Model(); 
     $this->load->database(); 
     } 

     function isInDatabase() 
     { 
     // Please ignore the sql query, it's just to show some random sql code with results 
11.  $result = $this->db->query('SELECT * FROM someTable WHERE ...'); 
     $numberOfRows = $result->num_rows(); 
     ... 
     return $test; 
     } 
    } 

現在控制器:

function someLogic() 
{ 
    $this->load->model('xxxx_Model', 'xxxxModel'); // not necessary to specify 
    $this->xxxxModel->isInDatabase(); 
} 

當我運行此我得到的錯誤:

Severity: Notice --> Undefined property: Xxxx_model::$db .../xxxx_model.php line 11 

我不知道這是爲什麼。如果我把數據庫代碼放在控制器中,它似乎可以工作,但只有在模型中使用此設置纔會失敗。我不能爲我的生命找出其中的代碼是誤入歧途......

回答

4

爲了增加ATNO的回答是:

class Xxxx_model extends Model 
{ 
    function XxxxModel() //<--- does not match model name Xxxx_model 
    { 
    parent::Model(); 
    $this->load->database(); 
    } 

基本上,你是不是構建類父類Model。如果您使用的是PHP5,則可以使用__construct(),否則無論您在控制器中加載什麼別名,都必須嚴格匹配類名稱。例如:

class Xxxx_model extends Model 
{ 
    function __construct() 
    { 
    parent::__construct(); // construct the Model class 
    } 
} 

我可能被誤認爲(在一段時間沒有使用1.x中),但是如果你構建模型類,沒有必要加載數據庫,如果你使用的是默認連接設置config/database.php,它應該已經爲你加載。

+1

+1我一直忘記PHP4。 – afarazit

+0

事實上,如果'$ this-> db'可用並且在控制器中工作,那麼加載數據庫肯定是不需要的,而不會像預期的那樣被模型加載。 –

+0

我不敢相信我錯過了構造函數的名字!這很殘酷。由於時間限制,我一直在進行36小時以上的編碼狂歡。這絕對是問題之一。我不得不改變模型的名稱,以便根據文檔正確加載,我想我錯過了也重構了構造函數的名稱。 –

2

如果function XxxxModel()是不是你的構造函數,你不裝載數據庫調用$this->xxxxModel->isInDatabase();

嘗試自動加載數據庫庫從autoload.php開始,或者在你的模型中創建一個合適的構造函數。

+0

他會有着不同的錯誤,如果是這樣的情況下(即類模型未找到),否則,您是正確的。 –

+0

+1給你的編輯 - 很好的捕捉。我確信OP會回來並聲稱這是一個錯字,我沒有看到隱藏模型名稱的原因,Xxxxx幾乎不可讀。 –

+0

我正在使用版本1.7.2 –

5

您必須首先加載db庫。在autoload.php添加以下代碼,

$autoload[‘libraries’] = array(‘database’);