CakePHP - 在一个项目中连接多个数据库

在涉及数据分析或数据可视化的项目中,通常需要从多个数据库获取数据,然后再进行整合加工。

在一个CakePHP项目中连接多个数据库其实是非常方便的,先来看下其官方文档说明:

By default all table instances use the default database connection. If your application uses multiple database connections you will want to configure which tables use which connections. This is the defaultConnectionName() method.

首先,在项目的config/app.php文件中可以配置多个数据库连接,默认情况下所有的模型实例都使用名为default的连接。如果某些特定的表需要使用不同的连接,可以在Table类中通过defaultConnectionName()方法进行指定,该方法返回需要使用的数据库连接名称。

在config/app.php中定义多个数据库连接

在项目的config/app.php文件中可以同时配置多个数据库连接,每个连接对应不同的主机、账号或数据库,CakePHP默认支持的数据库类型包括MySQL、SQLServer、Sqlite、Postgres等。

'Datasources' => [
		//默认连接
        'default' => [
           ...
            'host' => 'xx.xxx.xx.xx',
            'username' => 'xxx',
            'password' => 'xxx',
            'database' => 'xxx',
            ...
        ],

		//自定义连接
        'abc_db' => [
            ...
            'host' => 'xx.xxx.xx.xx',
            'username' => 'xxx',
            'password' => 'xxx',
            'database' => 'xxx',
            ...
        ],

		//另一个自定义连接
        'xyz_db' => [
            ...
            'host' => 'xxx.xxx.xxx.xxx',
            'username' => 'xxx',
            'password' => 'xxx',
            'database' => 'xxx',
            ...
        ]
    ]

在Table类中指定使用的连接

默认情况下,所有的Table类都采用默认的数据库连接(即config/app.php中定义的名称为default的连接),可以在Table类中使用defaultConnectionName() 方法来指定该表使用的连接名称,该方法必须是静态的。

假设FooTable类使用名称为abc_db的数据库连接,则代码如下:

class FooTable extends Table {
	/**
	 * 设置该表的默认数据库连接
	 * The defaultConnectionName() method must be static.
	 */
	public static function defaultConnectionName() {
		//返回在config/app.php中配置的数据库连接名称
		return 'abc_db';
	}

	//other methods
}

完成以上步骤后,在所有使用FooTable类进行数据处理的场景,系统都会默认使用abc_db配置中指定的数据库。

你可能感兴趣的:(CakePHP)