3

ループから複数のデータベースから接続しようとしていますが、CakePHPは変更できずdatabase、他の情報(ユーザー/パス/ホストなど)のみを変更できます。

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
            )
        [...]
        */
    }
}

それは最初の接続を返し、それが間違っているので、MyModelから何も選択できない他のすべての接続を返します。ユーザー/パスワード/ホストからの接続は問題ないようですが、データベースは変更されていないため、ユーザーがcdatabaseで選択する権限を持っていないため、エラーが発生します。

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'

ありがとう!

4

2 に答える 2

2

設定を削除せず、必要なものを変更するだけにしてください。

このタスクでは、私は正常に使用します

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

データベースの切り替えとエンジンとしてのmysqlが適切な組み合わせかどうかはわかりません。この目的のためにpostgresqlスキーマを使用します。

于 2012-12-19T18:24:25.180 に答える
2

モデルメソッドsetSource()を使用してテーブルを変更するか、setDataSource()を使用してdb構成を変更できます。

于 2012-12-19T22:04:28.390 に答える