bugfix> database > 投稿

セッションの値に応じて、モデルまたはコントローラーを読み込むたびにアプリを強制的にチェックしようとしています。

これは実際に実行されていますが、このモデルをスローしたときだけです。

class News_model extends CI_Model {
public function __construct()
{
    parent::__construct();
    if($this->session->dbname=='db1'){
        $this->db=$this->load->database('db1', TRUE); 
    }       
    else{
        $this->db=$this->load->database('db2', TRUE); 
    }
}
public function get_news($slug = FALSE)
{
        if ($slug === FALSE)
        {
                $query = $this->db->get('news');
                return $query->result_array();
        }
        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
}
}

しかし、私はその__constructコードをすべてのモデルまたはコントローラーに含めるように警告しません。

私はautoload.phpに追加しようとしました

$autoload['model'] = array('General');

私の一般的なコードはこのようなものです。

class General extends CI_Model {
function __construct()
{
    parent::__construct();
    if($this->session->dbname=='db1'){
        $this->db=$this->load->database('db1', TRUE); 
    }       
    else{
        $this->db=$this->load->database('db2', TRUE); 
    }
}
}  

どうすればできますか?

回答 1 件
  • データベースチェックを必要とするモデルによって拡張されるベースモデルを作成することにより、これを行うことができます。

    コードのチェックとロードを簡略化しました。単純な3項が使用する文字列を決定し、変数 $dbname に格納します 。その変数は、データベース、つまり $this->load->database($dbname); をロードするために使用されます 。

    load::database() の2番目の引数が必要だとは思わない  つまり、 $this->db を設定する必要はありません  明示的に。私が間違っている場合は、使用する

    $this->db = $this->load->database($dbname, TRUE);
    
    

    以下は「ベース」モデルです。ファイル名のプレフィックスは、設定 $config['subclass_prefix'] = 'MY_'; でconfig.phpで決定されます  基本モデルのファイルとクラス名を調整して、使用する「subclass_prefix」に一致させます。

    /application/core/MY_Model.php

    <?php
    class MY_Model extends CI_Model
    {
        public function __construct()
        {
            parent::__construct();
            $dbname = $this->session->dbname == 'db1' ? 'db1' : 'db2';
            $this->load->database($dbname);
        }
    }
    
    

    上記を使用して他のモデルを作成します...

    class News_model extends MY_Model
    {
        public function get_news($slug = FALSE)
        {
            if ($slug === FALSE)
            {
                $query = $this->db->get('news');
                return $query->result_array();
            }
            $query = $this->db->get_where('news', array('slug' => $slug));
            return $query->row_array();
        }
    }
    
    

あなたの答え