我有一个CakePHP 3.4.6 Web应用程序。由于它使用遗留(不是在Cake约定中编写)数据库表,我们选择手动编写所有SQL查询,而不是尝试设置Table
和Entity
类。我意识到有些人会不同意这一点,但这不是问题的重点。
我有3个数据库:app_db
,users_db
,extra_db
。
我已在config/app.php
中配置了与每个人的连接,以便:
'Datasources' => [
'default' => [], // 'app_db' credentials
'users_db' => [], // 'users_db' credentials
'extra_db' => [], // 'extra_db' credentials
];
我有一个位于src/Model/MyModel.php
的自定义模型文件。用于对一个数据库(app_db
)进行查询的示例如下所示:
namespace App\Model;
use Cake\Datasource\ConnectionManager;
class MyModel
{
protected $connection;
public function __construct()
{
$this->connection = ConnectionManager::get('default');
}
public function getData()
{
$sql = ''; // some SQL query
$stmt = $this->connection->prepare($sql);
$stmt->execute();
return $stmt->fetchAll('assoc');
}
}
这是有效的,因为它获取映射到default
的{{1}}的连接。
但是,我现在想要运行一个查询,该查询需要从app_db
和JOIN获取来自app_db
的数据。
如何在模型中配置它以便SQL与其他数据库通信?
答案 0 :(得分:0)
简单的方法是使用另一种方法来改变连接。
public function switchConnection($connection=''){
$this->connection = ConnectionManager::get(connection);
}
结束调用它以进行更改连接
MyModel->switchConnection('app_db');
下次运行getData时,它将与app_db通信而不是默认。