目前,CakePHP 在创建连接时不考虑数据源配置,我认为这不会在不久的将来添加,尤其是因为“开箱即用”不支持跨数据库连接(如在,只需在Postgres和SQLite中添加数据库名称即可。
假设您正在使用支持跨数据库连接的 DBMS,您可以做的是更改使用的表名以包含数据库名,即,databaseName.tableName
而不仅仅是tableName
public function initialize(array $config)
{
$this->table('databaseName.tableName');
// ...
}
或动态
$this->table($this->connection()->config()['database'] . '.tableName');
SQLite
对于 SQLite,您可以使用ATTACH DATABASE
语句轻松完成这项工作,如上面链接的答案所示。在你的 CakePHP 应用程序中,你可以在你的引导程序或任何你需要 id 的地方发出这个语句,比如
use Cake\Datasource\ConnectionManager;
// ...
/* @var $connection \Cake\Database\Connection */
$connection = ConnectionManager::get('default');
$connection->execute('ATTACH DATABASE "db2.sqlite3" AS databaseName');
它将db2.sqlite3
使用模式名称附加数据库databaseName
。从那里开始,上面提到的表名解决方案应该可以正常工作,至少是非动态的,因为动态的会使用类似于db2.sqlite3
模式名称的东西,这是行不通的。
Postgres
我不习惯 Postgres,所以在这一点上我不能给你一个例子,但它可能应该使用外部数据包装器类似地工作,即最初发出正确的语句,然后只引用指定的模式名称。