[英]Loading Multiple Databases in CodeIgniter
im trying to build a website using codeigniter where i will be using two databases 我试图使用codeigniter建立一个网站,我将使用两个数据库
however i seem to be having a problem in making them work 但是我似乎在使它们工作时遇到问题
the error that i get is 我得到的错误是
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: cms_db
Filename: models/site_model.php
Fatal error: Call to a member function select() on a non-object 致命错误:在非对象上调用成员函数select()
here is my code 这是我的代码
controller(site.php) 控制器(site.php)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Site extends CI_controller {
public function __construct()
{
parent::__construct();
// Your own constructor code
$this->load->model("site_model");
$cms_db = $this->load->database('cms', TRUE);
$site_db = $this->load->database('default', TRUE);
}
public function index()
{
$data = $this->_initialize_data();
$this->load->vars($data);
$this->load->view('site/index');
}
public function _initialize_data()
{
$data['cp'] = $this->site_model->get_cp();
$data['op'] = $this->site_model->get_op();
$data['learnfn'] = $this->site_model->get_learnfn();
return $data;
}
}
model(site_model.php) 模型(site_model.php)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
// CI 2.0 Compatibility
if(!class_exists('CI_Model')) { class CI_Model extends Model {} }
class Site_model extends CI_Model
{
function get_cp()
{
return $this->db->select()->from("listings")->where("list_UID","2")->get();
}
function get_op()
{
return $this->db->select()->from("listings",0,4)->where("list_UID","1")->get();
}
function get_learnfn()
{
return $cms_db->select()->from("education")->get()->row();
}
}
config(database.php) 配置(database.php)
//CMS
$active_group = 'cms';
$active_record = TRUE;
$db['cms']['hostname'] = 'localhost';
$db['cms']['username'] = 'root';
$db['cms']['password'] = '';
$db['cms']['database'] = 'db2';
$db['cms']['dbdriver'] = 'mysql';
$db['cms']['dbprefix'] = '';
$db['cms']['pconnect'] = TRUE;
$db['cms']['db_debug'] = TRUE;
$db['cms']['cache_on'] = FALSE;
$db['cms']['cachedir'] = '';
$db['cms']['char_set'] = 'utf8';
$db['cms']['dbcollat'] = 'utf8_general_ci';
$db['cms']['swap_pre'] = '';
$db['cms']['autoinit'] = TRUE;
$db['cms']['stricton'] = FALSE;
//SITE
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'db1';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
and this is how i echo them out 这就是我回应他们的方式
<?php echo $learnfn->name; ?>
am i missing something? 我想念什么吗?
thanks for the help 谢谢您的帮助
Hi first of all in config file you have to define only one active group and active record true not both and $cms_db you are loading at controller its part of controller not at module, you can do in following way if your active group is default 嗨,首先在配置文件中,您只需要定义一个活动组和活动记录,而不是两个,并且$ cms_db您要在控制器上加载它的控制器而不是在模块中,如果您的活动组是默认的,则可以按照以下方式进行
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Site extends CI_controller {
public function __construct()
{
parent::__construct();
// Your own constructor code
$this->load->model("site_model");
$this->site_model->cms_db = $this->load->database('cms', TRUE);
}
}
Model 模型
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Site_model extends MY_Model
{
public $cms_db;
//other option if you are not passing through controller
// this will always load cms_db
function __ construct(){
parent::__construct();
}
function get_cp()
{
return $this->db->select()->from("listings")->where("list_UID","2")->get();
}
function get_op()
{
return $this->db->select()->from("listings",0,4)->where("list_UID","1")->get();
}
function get_learnfn()
{
return $this->cms_db->select()->from("education")->get()->row();
}
}
MY_Model MY_模型
// CI 2.0 Compatibility
if(!class_exists('CI_Model')) { class CI_Model extends Model {} }
class MY_Model extend CI_Model{
public $cms_db = null;
function __construct(){
$this->site_model->cms_db = $this->load->database('cms', TRUE);
}
}
if you want $cms_db always create MY_Model put in its constructor load database and extend your all models with MY_Model 如果您希望$ cms_db始终创建MY_Model放入其构造函数负载数据库中,并使用MY_Model扩展所有模型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.