2016-07-26 62 views
2

我想在其他數據庫表中存儲一些數據歷史記錄和日誌,它可能是將來記錄方面非常大的數據庫。還應該支持跨數據庫SQL連接。所以請幫我解決這個問題。在CakePHP 3中連接多個數據庫3

在此先感謝

+0

[CakePHP中3多個數據庫連接]的可能的複製(https://stackoverflow.com/questions/29981890 /多數據庫連接在-cakephp中-3) –

回答

5

你按照下面FO相同的CakePHP應用程序中使用多個數據源的步驟。在配置/ app.php

你必須管理多個數據源配置,在默認的數據源保持主數據庫,使一個或多個數據源,我們可以說,它歷史第二

提及多個數據庫源數據源。如表類下面提到

'Datasources' => [ 
    'default' => [ 
     'className' => 'Cake\Database\Connection', 
     'driver' => 'Cake\Database\Driver\Mysql', 
     'persistent' => false, 
     'host' => '<host name>', 
     'username' => '<database user>', 
     'password' => '<database password>', 
     'database' => '<database name>', 
     'encoding' => 'utf8', 
     'timezone' => 'UTC', 
     'flags' => [], 
     'cacheMetadata' => true, 
     'log' => false, 
     'quoteIdentifiers' => false, 
     'url' => env('DATABASE_URL', null), 
    ], 
    'history' => [ 
     'className' => 'Cake\Database\Connection', 
     'driver' => 'Cake\Database\Driver\Mysql', 
     'persistent' => false, 
     'host' => '<host name>', 
     'username' => '<database user>', 
     'password' => '<database password>', 
     'database' => '<database name>', 
     'encoding' => 'utf8', 
     'timezone' => 'UTC', 
     'flags' => [], 
     'cacheMetadata' => true, 
     'log' => false, 
     'quoteIdentifiers' => false, 
     'url' => env('DATABASE_URL', null), 
    ] 
] 

指定數據源

Src/Model/Table/<AnyOtherSource>Table.php,添加下面的方法,要使用歷史數據源。無需在需要使用默認數據源的情況下添加以下方法,對於默認數據源,CakePHP將負責處理它。

public static function defaultConnectionName() { 
    return 'history'; 
} 

加入和CakePHP中3

您可以通過與相應的數據庫名稱前綴的 表訪問同一個MySQL實例其他數據庫模型關聯。您必須使用database_name.table_name指定表 名稱,爲此您需要在每個表類中添加以下代碼 。

例如

SELECT * FROM this_database.table_1 t1 JOIN that_database.table_2 t2 ON t2.column = t1.column

添加以下代碼中Src/Model/Table/<All>Table.php

class LogsTable extends Table { 

    public function initialize(array $config) { 
     parent::initialize($config); 

     $this->table($this->connection()->config()['database'] . "." . $this->table()); // this is very important for joining and associations. 

     // your other code for initilize method 
    } 

    public static function defaultConnectionName() { 
     return 'history'; 
    } 

    // other methods and your code should be here 

}