Можем ли мы подключить несколько баз данных в Codeigniter?

Я столкнулся с этой проблемой, чтобы подключиться к другой базе данных.

Ниже мой код. Я определил две базы данных, но когда я пытаюсь получить все записи, я получаю следующую ошибку:

Table 'crm.cdr_Feb2015' doesn't exist.

хотя я загрузил базу данных в контроллер, она использует базу данных по умолчанию для выбора деталей.

$active_group = 'default';
    $active_record = TRUE;

    $db['default']['hostname'] = 'localhost';
    $db['default']['username'] = 'root';
    $db['default']['password'] = '*****';
    $db['default']['database'] = 'crm';
    $db['default']['dbdriver'] = 'mysql';
    $db['default']['dbprefix'] = '';
    $db['default']['pconnect'] = FALSE;
    $db['default']['db_debug'] = TRUE;
    $db['default']['cache_on'] = TRUE;
    $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'] = TRUE;

    $db['asterisk']['hostname'] = 'localhost';
    $db['asterisk']['username'] = 'root';
    $db['asterisk']['password'] = '*****';
    $db['asterisk']['database'] = 'asterisk';
    $db['asterisk']['dbdriver'] = 'mysql';
    $db['asterisk']['dbprefix'] = '';
    $db['asterisk']['pconnect'] = FALSE;
    $db['asterisk']['db_debug'] = TRUE;
    $db['asterisk']['cache_on'] = TRUE;
    $db['asterisk']['cachedir'] = '';
    $db['asterisk']['char_set'] = 'utf8';
    $db['asterisk']['dbcollat'] = 'utf8_general_ci';
    $db['asterisk']['swap_pre'] = '';
    $db['asterisk']['autoinit'] = TRUE;
    $db['asterisk']['stricton'] = TRUE;

Теперь в моем контроллере я загрузил базу данных:

  public function index()
{
    $this->load->database('asterisk', TRUE);

    $test =$this->cdr_m->get();
    var_dump($test);

}

Файл модели:

    <?php
     class Cdr_M extends MY_Model
    {

    protected $_table_name = 'cdr_Feb2015';
    protected $_order_by = '';
    protected $_timestamps = TRUE;

    function __construct()
    {
        parent::__construct();
    }
}

person Rajan    schedule 28.08.2015    source источник


Ответы (3)


Попробуй это:

 public function index()
{
    $this->db = $this->load->database('asterisk', TRUE);

    $test =$this->cdr_m->get();
    var_dump($test);

}
person Vali S    schedule 28.08.2015
comment
Вы можете использовать $this-›db2 = $this-›load-›database('db2', TRUE);$this-›db2-›get('table_name'); - person Vali S; 28.08.2015
comment
Это не работает: $this-›db1 = $this-›load-›database('db2', TRUE); $this-›db2 = $this-›load-›database(); echo $this-›db1-›query(SELECT COUNT() AS CT FROM LiveCalls)-›row()-›CT; эхо '‹br/›'; echo $this-›db2-›query(SELECT COUNT() AS Ag FROM Agents)-›row()-›Ag;. При использовании двух баз данных одним и тем же методом. Как использовать базу данных по умолчанию также. - person Bugfixer; 28.08.2015
comment
Здесь LiveCalls принадлежат db2, а Агенты принадлежат группе по умолчанию. - person Bugfixer; 28.08.2015
comment
Исправление ошибок, $this-›db1 = $this-›load-›database('db1', TRUE); $this-›db2 = $this-›load-›database('db2', TRUE);echo $this-›db1-›query(SELECT COUNT() AS CT FROM LiveCalls)-›row()-›CT; эхо '‹br/›'; echo $this-›db2-›query(SELECT COUNT() AS Ag FROM Agents)-›row()-›Ag;. - person Vali S; 28.08.2015
comment
Или, если у вас установлена ​​база данных по умолчанию, просто $this->db2 = $this->load->database('db2', TRUE);echo $this->db->query("SELECT COUNT() AS CT FROM LiveCalls")->row()->CT; echo '<br/>'; echo $this->db2->query("SELECT COUNT() AS Ag FROM Agents")->row()->Ag; - person Vali S; 28.08.2015
comment
Эй, не могли бы вы помочь мне с этим: stackoverflow.com/questions/32266975/ - person Rajan; 31.08.2015

$this — это экземпляр вашей базы данных по умолчанию. Вам нужно назначить в другую переменную

$this->db2 = $this->load->database('asterisk', TRUE);
$test = $this->db2->cdr_m->get();
var_dump($test);
person Saty    schedule 28.08.2015
comment
Спасибо за ответ, но получил ошибку: Сообщение: Неопределенное свойство: CI_DB_mysql_driver::$cdr_m - person Rajan; 28.08.2015

Конфигурация/database.php

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'xxxxx';
$db['default']['database'] = 'CloudAgent';
$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;

$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'root';
$db['db2']['password'] = 'xxxxx';
$db['db2']['database'] = 'Asterisk';
$db['db2']['dbdriver'] = 'mysql';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = TRUE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;

Контроллер:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Analytics extends CI_Controller {


    function __construct()
          {
            parent::__construct();
            $this->load->database();
            $this->db2 = $this->load->database('db2',TRUE); 

          }

}

Запрос :

$in_calls = $this->db2->query('SELECT DATE_FORMAT(query_time,"%Y-%m-%d %h:%i%p") AS FromHour,total_calls AS callcount FROM LiveCalls WHERE DATE(query_time) = DATE(NOW())'); 

LiveCalls таблица принадлежит Asterisk базе данных.

person Bugfixer    schedule 28.08.2015
comment
Не могли бы вы помочь мне с этим: stackoverflow.com/questions/32266975/ - person Rajan; 31.08.2015