我正在研究一个多站点系统,该系统有一个"sitemanager"数据库,然后每个站点有一个数据库。
为了决定应该加载的站点数据库以及设置一些其他配置内容,我已经实现了MY_Controller,以便在我们到达任何主控制器之前从sitemanager数据库加载信息。
我已经设置了几个模型来使用sitemanager数据库,要做到这一点,我只需包含
public function __construct()
{
$this->_db_group = 'sitemanager';
parent::__construct();
}
,然后在my database.php
中指定sitemanager Settings。当我从标准控制器调用模型时,此方法工作正常,我已经设置了一个登录页面在sitemanager数据库中工作表,这工作正常,但是,当我尝试使用从MY_Controller内调用sitemanager数据库的模型时,它不起作用,错误信息我得到"表"翻译。域名"不存在",很明显,它试图加载我的默认数据库,而不是sitemanager的数据库。
谁能告诉我我做错了什么?为什么忽略sitemanager数据库的设置?MY_Controller.php如下所示:
<?php
class MY_Controller extends CI_Controller {
function MY_Controller() {
parent::__construct();
$this->load->model('company_model');
// Get domain and load info from database
$domain_info = $this->domain_model->get_by(array('domain' => $_SERVER['HTTP_HOST']));
// Company info
$company_info = $this->company_model->get($domain_info->company_id);
// Set global variables
define('GLOBAL_COMPANY_ID',$company_info->id);
define('GLOBAL_COMPANY_NAME',$company_info->name);
}
}
领域模型如下:
class Domain_model extends MY_Model {
public function __construct()
{
$this->_db_group = 'sitemanager';
parent::__construct();
}
}
谢谢:)
我修复了这个问题,以防其他人遇到同样的事情。
我将域模型加载移回MY_Controller,而不是自动加载它。直到我将域模型的负载移动到下的公司模型(公司模型使用默认数据库),这仍然不起作用,然后一切都工作正常。