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配置中指定的數據庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章