【问题标题】:Connect with multiple database in CakePHP 3在 CakePHP 3 中连接多个数据库
【发布时间】:2016-07-26 10:25:04
【问题描述】:

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

提前致谢

【问题讨论】:

标签: mysql cakephp cakephp-3.0


【解决方案1】:

您已按照以下步骤在同一个 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/&lt;AnyOtherSource&gt;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/&lt;All&gt;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

}

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多