tutorial proyecto example espaƱol ejemplos datos crear configurar cakephp3 blog php cakephp cakephp-2.0 cakephp-2.1 saas

proyecto - Cakephp no puede cambiar la base de datos sobre la marcha



cakephp3 (2)

Estoy intentando conectarme desde las bases de datos múltiples desde un bucle, pero las seens CakePHP no pueden cambiar la database , solo otras informaciones (como user / pass / host).

app / Config / database.php

<?php class DATABASE_CONFIG { [...] public $default = array( [..] // Where I have the companies ); public $client = array( [...] // Fakke settings, because I will change it on-the-fly ); }

app / Controller / CronController.php

$companies = $this->Company->find(''all''); foreach($companies as $company) { $settings = array( ''datasource'' => ''Database/Mysql'', ''host'' => $company[''Company''][''host''], ''login'' => $company[''Company''][''username''], ''password'' => $company[''Company''][''password''], ''database'' => $company[''Company''][''database''], ); ConnectionManager::drop(''client''); $db = ConnectionManager::create(''client'', $settings); try { debug($this->MyModel->find(''first'')); } catch (Exception $e) { echo ''<pre>''; echo "Exception: ", $e->getMessage(), "/n"; /* debug($this->MyModel->getDataSource()); Outputs: [...] [config] => Array ( [persistent] => [host] => 0.0.0.0 // CORRECT HOST [login] => root // CORRECT LOGIN [password] => pass // CORRECT PASSWORD [database] => database1 [port] => 3306 [datasource] => Database/Mysql [prefix] => [encoding] => utf8 ) [...] */ } }

Devuelve la primera conexión y todas las demás no puedo seleccionar nada de MyModel, porque está mal. Se ve la conexión del usuario / contraseña / host está bien, pero las bases de datos no se modifican, por lo tanto, como el usuario no tiene permiso para seleccionar en la base de datos, recibo el error.

Array ( // First connection, connection ok, MyModel return nothing ) // Second connection Exception: SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user ''database_user_2''@''localhost'' for table ''my_model'' // Third connection Exception: SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user ''database_user_3''@''localhost'' for table ''my_model'' // Fourth connection Exception: SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user ''database_user_4''@''localhost'' for table ''my_model'' // Fifth connection Exception: SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user ''database_user_5''@''localhost'' for table ''my_model''

¡Gracias!


Intenta no soltar la configuración, solo modifica las cosas que necesitas.

Para esta tarea uso con éxito

$dataSource = ConnectionManager::getDataSource(''company_data''); $dataSource->config[''schema''] = ''company_''.$id;

No sé si el cambio de base de datos y mysql como motor son buenos pares. Yo uso esquemas postgresql para este propósito.