从Codeigniter中的其他DB切换动态数据库

use*_*492 0 database codeigniter dynamic multiple-databases switch-statement

mi文件config.php是:

$active_group = 'default';
$active_record = TRUE;
Run Code Online (Sandbox Code Playgroud)

db master是唯一的DB

$db['master']['hostname'] = "localhost";
$db['master']['username'] = "root"; 
$db['master']['password'] = ""; 
$db['master']['database'] = "admin_nb";
$db['master']['dbdriver'] = "mysqli"; 
$db['master']['dbprefix'] = ''; 
$db['master']['pconnect'] = FALSE; 
$db['master']['db_debug'] = TRUE; 
$db['master']['cache_on'] = FALSE; 
$db['master']['cachedir'] = ""; 
$db['master']['char_set'] = "utf8"; 
$db['master']['dbcollat'] = "utf8_general_ci";
Run Code Online (Sandbox Code Playgroud)

db app是DYNAMIC DB

$db['app']['hostname'] = 'localhost';
$db['app']['username'] = 'root';
$db['app']['password'] = '';
$db['app']['database'] = $my_bd_dynamic;
$db['app']['dbdriver'] = 'mysqli';
$db['app']['dbprefix'] = '';
$db['app']['pconnect'] = TRUE;
$db['app']['db_debug'] = TRUE;
$db['app']['cache_on'] = FALSE;
$db['app']['cachedir'] = '';
$db['app']['char_set'] = 'utf8';
$db['app']['dbcollat'] = 'utf8_general_ci';
$db['app']['swap_pre'] = '';
$db['app']['autoinit'] = TRUE;
$db['app']['stricton'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

根据master数据库中的登录,我得到了数据库的名称,我必须将值赋给变量$ My_bd_dynamic

由于许多数据库,"bd_dynamic"无法手动编写

我在我的控制器中测试了这个:

class Trabajador extends CI_Controller {
public function __construct()
{
    parent::__construct();

    $this->load->driver('cache');
    $this->load->helper(array('form', 'url','otros_helper','fechas_helper','imagen_helper'));
    // Se le asigna a la informacion a la variable $user.
    $this->abbost_hotel = @$this->session->userdata('sess_abbost_hotel_'.substr(base_url(),-8,7));

        $my_bd_dynamic= $this->abbost_hotel->nombre_bd; /*var session*/
        $config_app['hostname'] = 'localhost';
        $config_app['username'] = 'root';
        $config_app['password'] = '';
        $config_app['database'] = $my_bd_dynamic;
        $config_app['dbdriver'] = 'mysqli';
        $config_app['dbprefix'] = '';
        $config_app['pconnect'] = FALSE;
        $config_app['db_debug'] = TRUE;
        $this->load->model('model_tareas','',$config_app);

}
public function index()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

而且,我的Model_tarea是:...

 public function m_cargar_tareas_activas()
    {
        $estado = 1;
        $this->db->select("colum1,colum2");
        $this->db->from('tarea');
        $query = $this->db->get();
        return $query->result_array();
    }
Run Code Online (Sandbox Code Playgroud)

...但是,读取数据库主数据而不是读取数据库$ my_bd_dynamic.请帮忙,有没有办法操纵这种方式?

$this->set->database = $my_dinamic_bd;
Run Code Online (Sandbox Code Playgroud)

我必须改变codeigniter的核心部分来解决问题?

use*_*492 6

谢谢,thiagobraga.但...

public function m_cargar_tareas_activas($group_name)
{
    ...
Run Code Online (Sandbox Code Playgroud)

它的参数$ group_name,必须用于我的所有方法我的解决方案是:

为database.php

$active_group = 'master';
$active_record = TRUE;
$db['master']['hostname'] = "localhost";
$db['master']['username'] = "root"; 
$db['master']['password'] = ""; 
$db['master']['database'] = "admin_nb";
$db['master']['dbdriver'] = "mysqli"; 
$db['master']['dbprefix'] = ''; 
$db['master']['pconnect'] = FALSE; 
$db['master']['db_debug'] = TRUE; 
$db['master']['cache_on'] = FALSE; 
$db['master']['cachedir'] = ""; 
$db['master']['char_set'] = "utf8"; 
$db['master']['dbcollat'] = "utf8_general_ci";
Run Code Online (Sandbox Code Playgroud)

我的新文件助手:

db_dinamic_helper

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function switch_db_dinamico($name_db)
{
    $config_app['hostname'] = 'localhost';
    $config_app['username'] = 'root';
    $config_app['password'] = '';
    $config_app['database'] = $name_db;
    $config_app['dbdriver'] = 'mysqli';
    $config_app['dbprefix'] = '';
    $config_app['pconnect'] = FALSE;
    $config_app['db_debug'] = TRUE;
    return $config_app;
}
Run Code Online (Sandbox Code Playgroud)

trabajador.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Trabajador extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->driver('cache');
        $this->load->helper(array('form', 'url','otros_helper','fechas_helper','imagen_helper','config_helper','permisos_helper'));
        $this->abbost_hotel = @$this->session->userdata('sess_abbost_hotel_'.substr(base_url(),-8,7));
        if(!@$this->abbost_hotel->usuario_id) redirect ('acceso');

            $nombre_bd = $this->abbost_hotel->nombre_bd;
            $config_app = switch_db_dinamico($nombre_bd);
            $this->load->model(array('model_producto','model_trabajadores','model_habitacion','model_tareas','model_notif'));
            $this->model_trabajadores->app_db = $this->load->database($config_app,TRUE);
            $this->model_habitacion->app_db = $this->load->database($config_app,TRUE);
            $this->model_producto->app_db = $this->load->database($config_app,TRUE);
            $this->model_tareas->app_db = $this->load->database($config_app,TRUE);
            $this->model_notif->app_db = $this->load->database($config_app,TRUE);
         date_default_timezone_set("America/Lima");
        //if(!@$this->user) redirect ('inicio/login');
        //$permisos = cargar_permisos_del_usuario($this->user->idusuario);
    }
    public function index()
    {
        //...
    }
Run Code Online (Sandbox Code Playgroud)

......我的模特:

model_tareas.php

<?php
class Model_tareas extends CI_Model {
    public $app_db;
    public function __construct()
    {
        parent::__construct();
    }
    public function m_cargar_tareas_activas()
    {
        $estado = 1;
        $this->app_db->select("tarea_id, prioridad");
        $this->app_db->from('tarea');
        $query = $this->app_db->get();
        return $query->result_array();
    }
Run Code Online (Sandbox Code Playgroud)

重要 - 文件db_dinamic_helper.php初始化文件autoload.php谢谢..¡:)