【问题标题】:Codeigniter autocheck db depending on session valueCodeigniter 根据会话值自动检查数据库
【发布时间】:2018-05-25 16:46:16
【问题描述】:

我试图强制我的应用在每次加载模型或控制器时根据我的会话值进行检查。

这实际上正在运行,但就在我抛出这个模型时。

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

我该怎么做?

【问题讨论】:

    标签: database codeigniter autoload


    【解决方案1】:

    您可以通过创建一个基础模型来做到这一点,该基础模型将由需要数据库检查的模型进行扩展。

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

    我认为您不需要load::database() 的第二个参数,这意味着您不需要明确设置$this->db。如果我错了,请使用

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

    以下是“基本”模型。文件名的前缀在 config.php 中确定,设置为 $config['subclass_prefix'] = 'MY_'; 调整基本模型的文件和类名以匹配您使用的“子类前缀”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      相关资源
      最近更新 更多