我试图强制我的应用每次加载模型或控制器时都要检查,具体取决于我的会话值。
这实际上正在运行,但就在我抛出这个模型的时候。
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);
}
}
}
我该怎么做?
答案 0 :(得分:1)
您可以通过创建基本模型来实现,该模型将由需要数据库检查的模型进行扩展。
我简化了检查和加载代码。一个简单的三元组确定要使用的字符串并将其存储在变量$dbname
中。该变量用于加载数据库,即$this->load->database($dbname);
。
我认为您不需要load::database()
的第二个参数,这意味着您不需要明确设置$this->db
。如果我错了,请使用
$this->db = $this->load->database($dbname, TRUE);
以下是“基础”模型。文件名的前缀在config.php中使用设置$config['subclass_prefix'] = 'MY_';
确定。调整基本模型的文件和类名以匹配您使用的'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();
}
}