Инициировать вторую базу данных в codeigniter с помощью вспомогательной функции - PullRequest
0 голосов
/ 26 ноября 2018

На моем сайте есть разные модули, каждый из которых имеет свои данные.

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

МойИдея состоит в том, чтобы создать вспомогательную функцию, которая проверяет, доступно ли соединение с базой данных или нет.Если нет, помощник должен инициализировать базу данных и сделать базу данных для запросов доступной в контроллере и моделях.

В документации Codeigniter я нашел только информацию о настройке нескольких баз данных - я не могу найти пример длясделать это с помощью своего рода динамического помощника.

Может быть, кто-то может помочь мне сделать шаг вперед?

1 Ответ

0 голосов
/ 27 ноября 2018

Что вы можете сделать, это установить сеанс ваших db_name, db_user и db_pass (если user и pass различны для каждого db_name).Чтобы повторно использовать динамическую базу данных, не всегда пропуская доступ.

Вот реализация:

Помощник:

if (!function_exists('get_dynamic_db')){
    function get_dynamic_db()
    {
        $CI =& get_instance();
        $db = $CI->session->user_data('other_db');
        $user = $CI->session->user_data('other_db_user');
        $pass = $CI->session->user_data('other_db_pass');

        $config_app = array(
            'dsn'   => '',
            'hostname' => 'localhost',
            'username' => $user,
            'password' => $pass,
            'database' => $db,
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => FALSE,
            'db_debug' => (ENVIRONMENT !== 'production'),
            'cache_on' => FALSE,
            'cachedir' => '',
            'char_set' => 'utf8',
            'dbcollat' => 'utf8_general_ci',
            'swap_pre' => '',
            'encrypt' => FALSE,
            'compress' => FALSE,
            'stricton' => FALSE,
            'failover' => array(),
            'save_queries' => TRUE
        );

        return $CI->load->database($config_app,TRUE);
    }
}

Модель:

Class DD_model extends CI_Model {

    var $dynamic_db;

    public function __construct() {

        $this->load->database(); // default db
        $this->dynamic_db = get_dynamic_db(); // dynamic db
    }

    public function ping_server_db()
    {
        $this->dynamic_db->from('some_table');
        $query = $dynamic_db->get();

        return $query->row() ? true : false;
    }
}

Контроллер:

public function select_db($db_name)
{
    $this->session->set_userdata(array('other_db' => $db_name, 'other_db_user' => 'user', 'other_db_pass' => 'pass'));
    $dynamic_db = $this->DD_model->ping_server_db();

    if (!$dynamic_db) {

        $this->session->unset_userdata('other_db');
        return false;
    }
}

При этом вы можете использовать get_dynamic_db(); во всех ваших моделях для запроса из динамического db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...