CakePHP 3 - 使用多个数据库连接*不使用ORM *

时间:2017-07-20 14:09:16

标签: php cakephp cakephp-3.0

我有一个CakePHP 3.4.6 Web应用程序。由于它使用遗留(不是在Cake约定中编写)数据库表,我们选择手动编写所有SQL查询,而不是尝试设置TableEntity类。我意识到有些人会不同意这一点,但这不是问题的重点。

我有3个数据库:app_dbusers_dbextra_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与其他数据库通信?

1 个答案:

答案 0 :(得分:0)

简单的方法是使用另一种方法来改变连接。

public function switchConnection($connection=''){
 $this->connection = ConnectionManager::get(connection);
}

结束调用它以进行更改连接

MyModel->switchConnection('app_db');

下次运行getData时,它将与app_db通信而不是默认。