-1

私はcodeigniterに非常に慣れておらず、モデルの使用方法を理解しようとしています。以前はMVPフレームワークを使用していましたが、少し異なっていました。モデルを初期化するユーザーコントローラーがあり(私はそれを正しく行ったと思います)、モデルには電子メールで行を取得する関数があります。

コントローラは次のようになります。

class Users extends CI_Controller{
    public function login(){
        $this->load->model('users_model');

        $this->users_model->login('slavigne@uark.edu', 'abcdefg');

        $this->load->view('templates/header');
        $this->load->view('users/login');
        $this->load->view('templates/footer');
    }
}

モデルは次のようになります。

class users_model extends CI_Model{
    public function users_model(){
            parent::__construct();
    }

    public function login($email, $password){
        $query = $this->db->get_where('users', array('email' => $email));
        return $query->result();
    }
}

私が得る問題は次のとおりです。

Call to a member function get_where() on a non-object

私が理解していることは、dbはオブジェクトではないことを意味しますが、モデルについて私が見たすべてのコードは、これが機能するはずだと言っています。どんな助けやアドバイスも素晴らしいでしょう!また、codeigniterへの初心者の間違いに関するアドバイスもいいでしょう!

4

1 に答える 1

2

あなたは逃しているようです$this->load->database();

class users_model extends CI_Model{
    public function users_model(){
            parent::__construct();
    }

    public function login($email, $password){
        $this->load->database();
        $query = $this->db->get_where('users', array('email' => $email));
        return $query->result();
    }
}

データベースライブラリをapplication/config/autoload.phpファイルに自動ロードすることもできます。

$autoload['libraries'] = array('database');

その場合、毎回手動でロードする必要はありませんが、データベース呼び出しが行われていないページにもロードされることを意味します。オプティマイザが帯域幅を節約するための注意が必要な場合があります。

また、複数のデータベース接続を使用している場合でも、$this->load->database();thoを使用する必要があります。詳細については、次のリンクを参照してください:http ://ellislab.com/codeigniter/user-guide/database/connecting.html

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);

使用する代わりに..

$this->db->query();
$this->db->result();

..代わりに以下を使用します:

$DB1->query();
$DB1->result();
$DB2->query();
$DB2->result();

に負荷を追加することもできる__construct()ので、コントローラーごとに1行だけ必要です。

于 2013-03-25T00:34:56.343 に答える