2011-06-20 14 views
2

最初のモデルクラスから:

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 

これはなぜわかりません。私がコントローラにdbコードを入れたら、動作しているように見えますが、これはモデルのこのセットアップでのみ失敗します。コードが道に迷っているところに私の人生を把握するために私がすることはできません...

答えて

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を使用していない)誤解されるかもしれないが、あなたはModelクラスを構築する場合は、のデフォルトの接続設定を使用している場合は、データベースをロードする必要はありませんconfig/database.php、それはあなたのために既に読み込まれているはずです。

+1

+1私はPHP4を忘れています。 – afarazit

+0

'$ this-> db'が利用可能で、前述のようにコントローラで作業していれば、実際にはデータベースをロードする必要はありません。 –

+0

私はコンストラクタ名を忘れてしまったとは思わない!それは残酷だ。私はタイムラインのために36時間以上のコーディングをしています。それは間違いなく問題の1つです。私はそれが正しく、私はまた、コンストラクタの名前をリファクタリング逃したと思いドキュメント、に従ってロードするためのモデルの名前を変更する必要がありました。私は、コンストラクタの名前を調整した場合 –

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’); 
関連する問題