我想把一些数据历史记录和日志存储在其他数据库表中,从未来的记录来看,这可能是一个非常大的数据库。还应支持跨数据库SQL joing。所以请帮我解决这个问题。
提前谢谢
最佳答案
您可以按照以下步骤在同一个cakephp应用程序中使用多个数据源。
在Config/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实例上的其他数据库。
具有适当数据库名称的表。必须指定表
带数据库名的名称。表名,为此您需要在下面添加
每个表类中的代码。
例如,
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
}
关于mysql - 在CakePHP 3中连接多个数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38587294/