CakePHP 3多个数据库

Cel*_*ydy 3 cakephp cakephp-3.0

我想使用CakePHP 3连接到第二个(远程)数据库.我在网上找到了解决方案,建议如何将不同的模型与不同的数据库相关联,但这不是我需要实现的.

我需要能够连接到远程数据库(与任何模型无关),并从我的控制器中的操作读取/写入一些记录.可以使用CakePHP实现吗?

编辑(更多信息):

我有一个网站,作为酒店客房的预订平台.这些房间的可用性可以通过我的网站控制并存储在我的数据库中.但对于一些客户,我希望能够直接连接到他们的私人数据库并使用他们的记录来检查可用性.

Sum*_*ker 7

请遵循以下说明

第1步:打开config/app.php查找Datasources数组并添加如下的Remote Database配置 -

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'port' => '3306',
        'username' => 'YOUR_DB_USER',
        'password' => 'YOUR_DB_PASS',
        'database' => 'YOUR_DB_NAME',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => false,
        'log' => false,
        'quoteIdentifiers' => false,
        'url' => env('DATABASE_URL', null),
    ],
    'remote_db_1' => [ /*Remote Database 1*/
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '192.168.1.47', /*YOUR_REMOTE_SERVER_IP*/
        'port' => '3306',
        'username' => 'REMOTE_DB_USER',
        'password' => 'REMOTE_DB_PASS',
        'database' => 'REMOTE_DB_NAME',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => false,
        'log' => false,
        'quoteIdentifiers' => false,
        'url' => env('DATABASE_URL', null),
    ],
   'remote_db_2' => [ /*Remote Database 2*/
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '192.168.1.47', /*YOUR_REMOTE_SERVER_IP*/
        'port' => '3306',
        'username' => 'REMOTE_DB_USER',
        'password' => 'REMOTE_DB_PASS',
        'database' => 'REMOTE_DB_NAME',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => false,
        'log' => false,
        'quoteIdentifiers' => false,
        'url' => env('DATABASE_URL', null),
    ],
Run Code Online (Sandbox Code Playgroud)

第2步:现在您可以Remote database在控制器中访问,如同 -

use Cake\Datasource\ConnectionManager;
use \PDO;

class YourController extends AppController{
    public function getRemoteData(){
      $conn1 = ConnectionManager::get('remote_db_1'); #Remote Database 1
      $conn2 = ConnectionManager::get('remote_db_2'); #Remote Database 2
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:现在您可以使用PDOInsert,Retrieve,Update方法

示例:

class YourController extends AppController{
    public function getRemoteData(){
      $conn1 = ConnectionManager::get('remote_db_1'); #Remote Database 1
      $sql   = "SELECT * FROM  users";
      $query = $conn1->prepare($sql);
      $query->execute();
      $result = $query->fetchAll(); #Here is the result
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 极好的!正是我要找的。谢谢! (2认同)