Удобный способ загрузки нескольких баз данных в Code Igniter - PullRequest
1 голос
/ 07 февраля 2011

Я добавил соответствующие массивы конфигурации в database.php, и они работают, однако я хотел бы получить более простой способ доступа к различным базам данных.Прямо сейчас я должен сделать что-то подобное в каждом методе контроллера:

function index(){
    $BILLING = $this->load->database('billing', TRUE);
    $INVENTORY = $this->load->database('inventory', TRUE);

    $data['billing'] = $BILLING->get('stuff');
    $data['inventory'] = $INVENTORY->get('stuff');
}

Я хотел бы иметь возможность поместить эти первые две строки в некоторый вид фильтра перед или фильтра pre_controller.

1 Ответ

8 голосов
/ 07 февраля 2011

Вы можете просто загрузить экземпляры базы данных глобально в вашем конструкторе, тогда они будут доступны для всех методов контроллера ...

пример контроллера

class Example extends CI_Controller {

    //declare them globally in your controller
    private $billing_db;
    private $inventory_db;

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

        //Load them in the constructor
        $this->billing_db = $this->load->database('billing', TRUE);
        $this->inventory_db = $this->load->database('inventory', TRUE);
    }

    function index() {

        //Then use them in any controller like this
        $data['billing'] = $this->inventory_db->get('stuff');
        $data['inventory'] = $this->billing_db->get('stuff');

    }

}

И если эти же базы данных используются на нескольких контроллерах, вы можете рассмотреть возможность расширения базового контроллера для включения этих глобальных переменных и загрузки их в конструктор базового контроллера в MY_Controller.php

пример MY_Controller.php

class DB_Controller extends CI_Controller {

    //declare them globally in your controller
    private $billing_db;
    private $inventory_db;

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

        //Load them in the constructor
        $this->billing_db = $this->load->database('billing', TRUE);
        $this->inventory_db = $this->load->database('inventory', TRUE);
    }

}

Тогда вы бы использовали это так ...

class Example extends DB_Controller {

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

    function index() {

        //Then use them in any controller like this
        $data['billing'] = $this->inventory_db->get('stuff');
        $data['inventory'] = $this->billing_db->get('stuff');

    }

}
...