在CakePHP 3中连接多个数据库3

问题描述:

我想在其他数据库表中存储一些数据历史记录和日志,它可能是将来记录方面非常大的数据库。还应该支持跨数据库SQL连接。所以请帮我解决这个问题。在CakePHP 3中连接多个数据库3

在此先感谢

+0

[CakePHP中3多个数据库连接]的可能的复制(https://*.com/questions/29981890 /多数据库连接在-cakephp中-3) –

你按照下面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 

}