Banco de dados dinâmicos

36 views
Skip to first unread message

Erick Barbosa

unread,
Dec 13, 2012, 11:37:09 AM12/13/12
to kohan...@googlegroups.com
Estou tentando criar um sistema com vários clientes onde cada cliente vai ter o seu próprio banco de dados

o que eu tentei fazer foi colocar o nome database dentro de uma sessão, mas não deu certo aparece um erro

código que eu tentei fazer

config/database.php

       'cliente' => array
(
'type'       => 'MySQL',
'connection' => array(
'hostname'   => 'localhost',
'database'   => Session::instance()->get('database'), // Aqui esta o erro
'username'   => 'root',
'password'   => '',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset'      => 'utf8',
'caching'      => FALSE,
), 

e o erro que aparece é esse


Alguém poderia me ajudar como posso resolver esse problema


Marcelo Rodrigo

unread,
Dec 13, 2012, 11:44:55 AM12/13/12
to kohan...@googlegroups.com
Por acaso, está guardando a SESSION no banco também?


Atenciosamente,

Marcelo Rodrigo
http://marcelorodrigo.com




--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/6o3CFuDYExAJ.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

Bernardo - Sudeste Hosting

unread,
Dec 13, 2012, 11:45:13 AM12/13/12
to kohan...@googlegroups.com
Você pode escolher qual cando de dados usar na própria "query builder"

Exemplo:

$db = array() com configuração.
DB::select(*)->from('clientes')->where('status', '=', ')->execute($db);



Em 13 de dezembro de 2012 14:37, Erick Barbosa <erickba...@gmail.com> escreveu:

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/6o3CFuDYExAJ.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.



--
Atenciosamente,
Bernardo Sepulveda de Castro
------- ------- ------- -------- -------- --------
Rede Sudeste
Aqui você não fica sozinho
www.redesudeste.com.br

Erick Barbosa

unread,
Dec 13, 2012, 11:52:57 AM12/13/12
to kohan...@googlegroups.com
A sessão não esta sendo armazenada no banco

Erick Barbosa

unread,
Dec 13, 2012, 11:53:32 AM12/13/12
to kohan...@googlegroups.com
Mais se eu tiver que utilizar um ORM
como ficaria?

Bernardo - Sudeste Hosting

unread,
Dec 13, 2012, 11:59:51 AM12/13/12
to kohan...@googlegroups.com
Com ORM? talvez isso resolva.
Na configuração do database criar um novo alternativo para os clientes.
Ao executar a ação grave o novo banco padrão:

Não sei se vai funcionar.

---------------
Database::$default = 'test';
Database::instance()->connect();





Em 13 de dezembro de 2012 14:53, Erick Barbosa <erickba...@gmail.com> escreveu:
ORM

Douglas J.A.M

unread,
Dec 13, 2012, 12:05:41 PM12/13/12
to kohan...@googlegroups.com
Fiz uma pergunta semelhante conforme abaixo, só você adaptar ao seu projeto, resposta de Rodrigo, não cheguei a testar, mas quase certeza que funcionará!

https://groups.google.com/forum/?fromgroups#!topic/kohana-php/rFOKCQFQrOM


--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.

felipe bastos

unread,
Dec 13, 2012, 12:14:35 PM12/13/12
to kohan...@googlegroups.com

Vc tentou retirar a chamada de metodo do array?

$db_cliente ::: Session::instance() ....

return array(
...

"database" ..... $db_cliente,
...
)

Pode ser que de certo.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/6o3CFuDYExAJ.

Erick Barbosa

unread,
Dec 13, 2012, 12:20:40 PM12/13/12
to kohan...@googlegroups.com
Já tentei também
mas o erro continua

Erick Barbosa

unread,
Dec 13, 2012, 12:24:58 PM12/13/12
to kohan...@googlegroups.com
Pelo que eu percebi se eu colocar 

'database'   => Session::instance()->get('database'),

ou 'database'   => ' ',

da o mesmo erro, isso significa que não esta sendo passado nada no valor da sessão
estranho isso, porque quando eu teste em um controller dar certo

Rodrigo Monteiro Ferreira

unread,
Dec 13, 2012, 1:13:12 PM12/13/12
to kohan...@googlegroups.com
Erick,

Tenho um desse que funciona, na verade voce precisa reescrever o metodo _initialize da classe ORM para ler o localhost da session...



Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/DMXJh8zQ26EJ.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.



--
Rodrigo Monteiro
rodrigom...@gmail.com
(11) 96267-9366

Erick Barbosa

unread,
Dec 13, 2012, 4:30:34 PM12/13/12
to kohan...@googlegroups.com
Infelizmente eu não consegui fazer Rodrigo

Seria pedir demais se você colocasse um um tutorial mais detalhada ou um vídeo mostrando como fazer?

Rodrigo Monteiro Ferreira

unread,
Dec 14, 2012, 4:30:29 AM12/14/12
to kohan...@googlegroups.com
Sem problemas, no meu caso eu precisei fazer assim... um banco de dados para login que informa host, database, usuario e senha:

ao fazer login:
public function action_login(){	
		
$usuario = ORM::Factory('users')->where("username", "=", $_POST['username'])->where("password", "=", md5($_POST['password']))->find();
$config = ORM::factory("configs", $usuario->id_alert);
Session::instance()->set('config', $config);
}


coloquei em application/classes/orm.php o codigo:

<?php defined('SYSPATH') or die('No direct script access.');

class ORM extends Kohana_ORM {
	
	protected function _initialize()
	{
		// Set the object name and plural name
		$this->_object_name = strtolower(substr(get_class($this), 6));
		$this->_object_plural = Inflector::plural($this->_object_name);
	
		if ( ! $this->_errors_filename)
		{
			$this->_errors_filename = $this->_object_name;
		}
	
		if ( ! is_object($this->_db))
		{
			if($this->_db_group == 'default') // Se for Default usa dados da session
			{
				$this->_db = Database::instance('default', array
						(
								'type'       => 'mysql',
								'connection' => array(
										'hostname'   => Session::instance()->get("config")->host,
										'database'   => Session::instance()->get("config")->database,
										'username'   => Session::instance()->get("config")->user,
										'password'   => Session::instance()->get("config")->password,
										'persistent' => FALSE,
								),
								'table_prefix' => '',
								'charset'      => 'utf8',
								'caching'      => FALSE,
								'profiling'    => TRUE,
						));
			}else{
				$this->_db = Database::instance($this->_db_group); // Se nao segue a mesma logica
			}
		}
	
		if (empty($this->_table_name))
		{
			// Table name is the same as the object name
			$this->_table_name = $this->_object_name;
	
			if ($this->_table_names_plural === TRUE)
			{
				// Make the table name plural
				$this->_table_name = Inflector::plural($this->_table_name);
			}
		}
	
		foreach ($this->_belongs_to as $alias => $details)
		{
			$defaults['model'] = $alias;
			$defaults['foreign_key'] = $alias.$this->_foreign_key_suffix;
	
			$this->_belongs_to[$alias] = array_merge($defaults, $details);
		}
	
		foreach ($this->_has_one as $alias => $details)
		{
			$defaults['model'] = $alias;
			$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
	
			$this->_has_one[$alias] = array_merge($defaults, $details);
		}
	
		foreach ($this->_has_many as $alias => $details)
		{
			$defaults['model'] = Inflector::singular($alias);
			$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
			$defaults['through'] = NULL;
			$defaults['far_key'] = Inflector::singular($alias).$this->_foreign_key_suffix;
	
			$this->_has_many[$alias] = array_merge($defaults, $details);
		}
	
		// Load column information
		$this->reload_columns();
	
		// Clear initial model state
		$this->clear();
	}
	
}
Entao os models que utilizarem o group default ira usar no ORM os dados da session, no config/database.php os dados da config default podem ficar em branco... se tiver duvida manda ai!

Em 13 de dezembro de 2012 19:30, Erick Barbosa <erickba...@gmail.com> escreveu:
eria pedir demais se você colocasse um um tutorial mais detalhada ou um vídeo mostrando como fazer?



Rodrigo Monteiro Ferreira

unread,
Dec 14, 2012, 4:31:42 AM12/14/12
to kohan...@googlegroups.com
Deve dar para herdar o ORM e só sobrescreever o metodo initialize ou fazer um modulo, mas como estava com prazo curto... hehehe


2012/12/14 Rodrigo Monteiro Ferreira <rodrigom...@gmail.com>
Reply all
Reply to author
Forward
0 new messages