Database Codeigniter自动检查数据库取决于会话值

Database Codeigniter自动检查数据库取决于会话值,database,codeigniter,autoload,Database,Codeigniter,Autoload,我试图强迫我的应用程序在每次加载模型或控制器时都进行检查,具体取决于我的会话值 这实际上是在运行,但就在我得到这个模型的时候 class News_model extends CI_Model { public function __construct() { parent::__construct(); if($this->session->dbname=='db1'){ $this->db=$this->load->databa

我试图强迫我的应用程序在每次加载模型或控制器时都进行检查,具体取决于我的会话值

这实际上是在运行,但就在我得到这个模型的时候

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();
}
}
但我并不想在我所有的模型或控制器中包含构造代码

我已经尝试添加我的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); 
    }
}
}   

我该怎么做呢?

您可以通过创建一个基本模型来完成,该模型将由需要数据库检查的模型进行扩展

我简化了检查和加载代码。简单的三元数确定要使用的字符串,并将其存储在变量$dbname中。该变量用于加载数据库,即$this->load->database$dbname

我认为加载::database不需要第二个参数,这意味着不需要显式设置$this->db。如果我错了,请使用

$this->db = $this->load->database($dbname, TRUE);
下面是基本模型。文件名的前缀在config.php中通过设置$config['subclass_prefix']='MY_']确定;调整基本模型的文件和类名,以匹配您使用的“subclass_前缀”

/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();
    }
}