Mais de um banco de Dados no Codeigniter

Para usar mais de um banco de dados no Codeigniter é muito fácil! No arquivo config.php você pode configurar vários grupos de banco de dados por exemplo:

$db['default']['dsn']      = '';
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$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['default']['failover'] = array();

$db['banco_2']['dsn']      = '';
$db['banco_2']['hostname'] = 'localhost';
$db['banco_2']['username'] = '';
$db['banco_2']['password'] = '';
$db['banco_2']['database'] = '';
$db['banco_2']['dbdriver'] = 'mysql';
$db['banco_2']['dbprefix'] = '';
$db['banco_2']['pconnect'] = FALSE;
$db['banco_2']['db_debug'] = TRUE;
$db['banco_2']['cache_on'] = FALSE;
$db['banco_2']['cachedir'] = '';
$db['banco_2']['char_set'] = 'utf8';
$db['banco_2']['dbcollat'] = 'utf8_general_ci';
$db['banco_2']['swap_pre'] = '';
$db['banco_2']['autoinit'] = TRUE;
$db['banco_2']['stricton'] = FALSE;
$db['banco_2']['failover'] = array();

O primeiro banco já vai ser carregado normalmente, como você usaria se fosse somente um, para utilizar o segundo é só executar o seguinte código:

$DB1 = $this->load->database('banco_2', TRUE);

E ao invés de usar o código $this->db->query() por exemplo você usária: $DB1->query()

$this->db->query();
$this->db->result();
etc...

//Use dessa forma!

$DB1->query();
$DB1->result();
etc...

Codeigniter Reactor já era! Agora é só Codeigniter

Nesse final de semana aconteceu a CICON2011 e nela a comunidade Codeigniter ficou sabendo de várias novidades, entre elas a morte do Codeigniter Reactor e a mudança pro Github.

O que isso significa?

A partir de agora o antes conhecido como “Codeigniter Core” não será mais aberto pra comunidade e o Reactor virá somente Codeigniter sendo mantido pela comunidade e os reactors engineers conforme já havia anúnciado. Outro fator importante anúnciado no CICON foi que eles estão abandonando o mercuy. Isso mesmo, agora o CI está hospedado no Github, o que é uma ótima notícia já que git a principio é mais usado que mercury, e o github tem várias vantagens encima do bitbucket.

A Ellislab fala que eles foram pro bitbucket por motivos internos que atendiam as suas necessidades na época, e que como elas mudaram bastante agora eles estão indo de vez para o github.

A outra grande novidade do evento é o lançamento da versão 2.0.3, já que o codeigniter ficou um bom tempo parado sem atualizações.

Autocomplete no netbeans para o CodeIgniter

Essa é uma dica rápida, para ativar o autocomplete do codeigniter no netbeans, basta você criar um arquivo na raiz do projeto, eu o chamei de ci.php, dentro do ci.php coloque o código abaixo:

/**
 * @property CI_Loader $load
 * @property CI_Form_validation $form_validation
 * @property CI_Input $input
 * @property CI_Email $email
 * @property CI_DB_active_record $db
 * @property CI_DB_forge $dbforge
 * @property CI_Table $table
 * @property CI_Session $session
 * @property CI_FTP $ftp
 * @property Cache $cache
 * ....
 */
Class CI_Controller {

}

E pronto! a partir de agora seu netbeans já auto completará o codeigniter! 🙂
Ps: Não se esqueça de apagar o arquivo quando o projeto estiver pronto/não enviar para seu servidor!
Qualquer dúvida/bugs sei la, deixa nos comentários!

Por que utilizar o Codeigniter Reactor

Com o lançamento oficial do Codeigniter Reactor, muitos estão se perguntando qual versão utilizar: Codeigniter Reactor ou Codeigniter Core? A própria EllisLab recomenda o uso do Reactor ao invés do core, toda vez que você vir a palavra Codeigniter no site da ellislab, eles irão estar falando do Reactor, o Core será utilizado como base nos produtos comerciais da Ellislab deixando o Reactor na mão dos engineers e da comunidade.

Em minha opinião, é muito melhor utilizar a versão da comunidade que com certeza, será mais ativa e atualizada, não somente com novidades mas também com correção de bugs, os engineers estarão muito ativos nessas correções imediatas, e também estarão avaliando pulls da comunidade, eu mesmo dei um pull no github, e recebi com 2 dias uma resposta, no caso ele (Phill) já tinha corrigido o problema só não tinha “commitado” ainda.

O que vem em breve?

Eles já avisaram, em breve teremos uma forma nativa de fazer autenticação no Codeigniter, o que na minha opinião será muito bem vindo. Também existem planos para tornar o model mais “object like”, estão testando uma forma de fazer com que o active record retorne uma instância do model que ele represente, mas nada está concreto ainda quanto a isso. E uma coisa que eu acho bem interessante será a parte de comentários no user guide, ou seja nós poderemos adicionar conteúdo ao user guide, estilo php.net deixando não somente dúvidas como contribuições, enriquecendo e muito o conteúdo do user guide.

Para acompanhar as novidades é bom acompanhar o changelog, e saber o que está mudando e se você deve ou não migrar seus aplicativos atuais.

Dicas para utilizar a session do CodeIgniter

Hoje vou dar algumas dicas para utilizar a session do codeigniter, da forma que eu uso em meus projetos.

Utilize Banco de dados

Nunca utilize a session do CI como ela vem por padrão, pois a mesma é utilizada em cookies e só cabe 4kb de dados, ou seja é muito pouco para a maioria das aplicações. Eu gosto de deixar por padrão a mesma com banco de dados ex do config:

$config['sess_cookie_name']		= 'ci_session';
$config['sess_expiration']		= 7200;
$config['sess_encrypt_cookie']	= FALSE;
$config['sess_use_database']	=TRUE;
$config['sess_table_name']		= 'ci_sessions';
$config['sess_match_ip']		= FALSE;
$config['sess_match_useragent']	= TRUE;
$config['sess_time_to_update'] 	= 300;

E você não pode esquecer de criar a tabela em seu banco de dados, segue o código abaixo:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

Utilize o FlashData

O recurso de flash data do CodeIgniter é muito interessante por exemplo para um cadastro, onde você precisa dar uma mensagem de erro ou uma mensagem de sucesso, onde você não precisará mais desta mensagem no futuro.

Veja um exemplo de como utilizar o flashdata

$this->session->set_flashdata('sucesso','Seu produto foi cadastrado com sucesso.');

e na view você pode simplesmente chamar sua varíavel

<h3><?php echo $this->session->flashdata('sucesso');?></h3>

Ps: Lembrando que o flashdata só estará disponível na próxima requisição.

Até hoje eu não tive problema algum utilizando a session do CodeIgniter, espero que estas dicas sejam uteis, e se alguém tiver alguma sugestão de post, por favor, faça nos comentários!

Exemplo de model e MY_Model do CodeIgniter

Hoje vou apenas deixar um exemplo de model, de um projeto meu.
vou deixar a minha MY_Model e o Model em si.
MY_Model

<?php

class MY_Model extends CI_Model {

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

    protected function required($options = array()) {
        foreach ($options as $option) {
            if (!isset($this->{$option}))
                return false;
        }
        return true;
    }

}
<?php

class Opicionais_Model extends MY_Model {

    public $codigo_opicionais;
    public $nome;
    public $data_hora_inclusao;

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

    public function get($options = array()) {
        if (isset($options['codigo_opicionais'])) {
            $this->db->where('codigo_opicionais', $options['codigo_opicionais']);
        }
        if (isset($options['nome'])) {
            $this->db->where('nome', $options['nome']);
        }
        if (isset($options['limit'])) {
            $this->db->limit($option['limit'][0], $option['limit'][1]);
        }
        if (isset($options['order_by'])) {
            $this->db->order_by($option['order_by']);
        }
        if (isset($options['array'])) {
            return$this->db->get('opicionais')->result_array();
        }
        return $this->db->get('opicionais')->result();
    }

    public function salvar() {
        $options = array(
            'nome',
        );
        $this->data_hora_inclusao = date('Y-m-d h:m:s');
        if ($this->required($options)) {
            if (!isset($this->codigo_opicionais)) {
                return $this->db->insert('opicionais', $this);
            } else {
                $this->db->where('codigo_opicionais', $this->codigo_opicionais);
                return $this->db->update('opicionais', $this);
            }
        } else {
            return false;
        }
    }

    public function count() {
        return $this->db->count_all('opicionais');
    }

    public function deletar($codigo_opicionais = '') {
        if (isset($this->codigo_opicionais)) {
            $this->db->where('codigo_opicionais', $this->codigo_opicionais);
            return $this->db->delete('opicionais');
        } else if (isset($codigo_opicionais)) {
            $this->db->where('codigo_opicionais', $codigo_opicionais);
            return $this->db->delete('opicionais');
        } else {
            return false;
        }
    }

}

Qualquer dúvida em relação ao funcionamento do model, pode deixar nos comentários! 🙂

Usando o Active Record do CodeIgniter

Quando comecei a utilizar o CodeIgniter não gostava muito do Active Record, preferia fazer minhas queries na mão mesmo, mas com o passar do tempo, passei a perceber a vantagem de se utilizar o Active Record.

Vou deixar um exemplo abaixo de um método get que eu uso em meus projetos

public function get($options = array()) {
        if (isset($options['select'])) {
            $this->db->select($options['select']);
        }
        if (isset($options['codigo_usuario'])) {
            $this->db->where('codigo_usuario', $options['codigo_usuario']);
        }
        if (isset($options['email'])) {
            $this->db->where('email', $options['email']);
        }
        if (isset($options['limit'])) {
            $this->db->limit($options['limit'][0], $options['limit'][1]);
        }
        if (isset($options['order_by'])) {
            $this->db->order_by($options['order_by']);
        }
        if (isset($options['group_by'])) {
            $this->db->group_by($options['group_by']);
        }
        if (isset($options['array'])) {

            return $this->db->get('usuario')->result_array();
        }

        return $this->db->get('usuario')->result();
    }

Este é apenas um exemplo do poder do Active Record, a facilidade para fazer diferentes tipos de “where” em meu código, setar um order by, um group_by
um limit, claro eu poderia fazer tudo isso com o query também, porém com muito mais código etc. Com o Active Record eu não preciso escapar campo por campo, pois o mesmo já faz isso para min.

E para atualizar, excluir e inserir dados no banco ? O Active Record é perfeito! Você pode inserir um objeto/array que seja igual a sua tabela com uma linha de código, ao invéz de fazer aquela query gigante de insert ou update!

$objUsuario = new stdClass();
$objUsuario->nome = 'William Rufino';
$objUsuario->email = 'contato@williamrufino.com.br';
$this->db->insert('usuario', $objUsuario);

Um update é muito simples também!

$objUsuario = new stdClass();
$objUsuario->codigo_usuario = 123;
$objUsuario->nome = 'William Rufino';
$objUsuario->email = 'contato@williamrufino.com.br';
$this->db->where('codigo_usuario',$objUsuario->codigo_usuario);
$this->db->update('usuario', $objUsuario);

Viram como é fácil utilizar o Active Record do CodeIgniter?

E para finalizar, deixo o link do user guide do Active Record que é seu melhor amigo na hora de fazer consultas.

CodeIgniter Reactor já está aberto!

CodeIgniter
CodeIgniter

A todos que estavam esperando o CodeIgniter Reactor, o mesmo já está disponível para a comunidade, através do bitbucket ainda não olhei bem o que está rolando, mas parece que a maioria até agora foi correção de bugs.

Os “Reactors Engineers” aconselham baixar e ler o user guide para ver o changelog.

E para os amantes do GIT foi criado um mirror no github para o mesmo.

Fonte: http://codeigniter.com/forums/viewthread/177924/