Расширение класса базы данных в CodeIgniter 3

Класс абстракции базы данных в CodeIgniter достаточно хорош, однако все-же не идеален. Ситуацию можно исправить, написав нужные опции самостоятельно, однако в документации можно увидеть что класс для работы с базой данных не расширяется.

Чтобы расширить класс базы данных, не залезая в код фреймворка, можно сделать следующим образом:

1.) Расширить класс MY_Loader

class MY_Loader extends CI_Loader
{
    public function database($params = '', $return = FALSE, $active_record = NULL)
    {
        require_once(BASEPATH.'database/DB_driver'.EXT);

        require_once(BASEPATH.'database/DB_active_rec'.EXT);

        require_once (APPPATH.'core/MY_Db'.EXT);

        return parent::database($params, $return, $active_record);
    }
}

2.) В файле application/core/MY_Db.php расширить класс базы данных

class CI_DB extends CI_DB_active_record 
{
    public function result($table)
    {
        return $this->get($table)->result();
    }

    public function row($table)
    {
        return $this->limit(1)->get($table)->row();
    }
}

При таком расширении класс базы данных всегда содержит Active Record, независимо от значения $db['active_record'] в конфигурации приложения. Однако, в одной из последних обновлений третьей версии фреймворка, опцию $active_reсord в функции database убрали, поэтому проблемы в этом нет.

06.06.2012

Теги: