Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Di Salvo

[Resolvido] Conectar a mais de um database?

Recommended Posts

Salve salve, cá estou estou eu de novo :)

 

Desta vez trago a seguinte indagação: "Como é feita a conexão a mais de um database no CakePHP?"

 

E ainda sendo possível realizar find's nele e tudo mais. Basta somente eu declarar no database.php outra base?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve pegar a instancia da fonte de dados:

$db2 =& ConnectionManager::getDataSource('nomeDoDbConfig');

Onde que "nomeDoDbConfig" e o nome do atributo de database.php

Aí você tem outra conexão aberta :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas esse código eu colocaria onde?

 

Eu fiz assim:

 

1) Configurei meu database.php com mais uma conexão na variável $base2 (variável qualquer);

2) Criei o model que precisava e nele eu fiz a definição: var $useDbConfig = 'base2';

 

Apartir daí esse model já usa a minha outra base. Porém eu tento dar um 'find' com esse model e ele não me retorna nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh! Eu pensei que você queria usar 2 realmente ao mesmo tempo, então esquece aquele código.

Poste o que você ja fez aí. (Model e Controller).

Tem algum dado no Model?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh! Eu pensei que você queria usar 2 realmente ao mesmo tempo, então esquece aquele código.

Poste o que você ja fez aí. (Model e Controller).

Tem algum dado no Model?

 

A segunda base é basicamente para fazer uns selects e recuperar dados. Não irei fazer inserção e nem edição de dados.

 

Fiz um controller e um model:

 

Model:

 

class Conta extends AppModel {

	var $name = 'Conta';
	var $useTable = 'contas';
	var $useDbConfig = 'base2r';

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $hasMany = array(
		'Plano' => array(
			'className' => 'Plano',
			'foreignKey' => 'plano_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);

}

 

Controller:

 

class ContasController extends AppController {

	var $name = 'Contas';
	var $helpers = array('Html', 'Form');

	function index() {
        $teste = $this->Conta->find('all');

        print_r($teste);

	}

}

 

Como você pode ver, eu só fiz uma index, para conferir na view dela se ela me traria os dados corretamente. E trouxe :)

 

Porém quando tento trazer algo dele, por meio de outro controlador ela está inacessível. Porque será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre este "outro controlador" e faça isso nele:

OutroController:
echo $this->Conta->useDbConfig;

E veja se está tudo ok. Se não estiver altere:

$this->Conta->useDbConfig = 'minhabase';

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo $this->Conta->useDbConfig;

Estava vindo vazio, e fiz conforme abaixo e guardou o nome da base.

 

$this->Conta->useDbConfig = 'minhabase';

Agora quando eu dou um find('all') ele me traz um erro. Eis o erro:

 

Call to undefined method stdClass::find()

Pra resolver esse erro, no controller de Usuarios eu fiz o seguinte:

 

var $uses = 'Conta';

Agora eu consigo ter acesso a base.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.