2017-03-14 51 views
1

我想连接到使用CakePHP 3.第二(远程)数据库中,我发现网上的解决方案是建议如何不同型号,不同的数据库相关联,但不是我所需要的实现。CakePHP的3多数据库

我需要能够连接到远程数据库(即不与任何模型相关联),并在我的控制动作的读/写一些记录。这可以通过CakePHP来实现吗?

编辑(详细信息):

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

+0

如果你需要写在一个数据库中的表,你还不如建立一个模型......我不明白的部分“不与任何模型相关联”。它可能不是你主要数据结构的一部分,但它仍然是结构化数据。 – JvO

+0

@JvO感谢您的回复!这是事情。我有一个网站作为酒店客房的预订平台。这些房间的可用性可以通过网站进行控制并存储在我的数据库中。但对于一些客户,我希望能够直接连接到他们的私人数据库并使用他们的记录来检查可用性。我需要为每个客户创建一个自定义模型吗? – Cellydy

+0

不要这些客户提供您可以访问的api吗?你为什么要直接查询数据库?只是好奇 – yBrodsky

回答

1

按下列说明

步骤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), 
    ], 

步骤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 
    } 
} 

注:现在你可以使用PDO方法插入,检索,更新

例子:

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 
    } 
} 
+0

太棒了!正是我在找什么。谢谢! – Cellydy

+0

不客气! @Cellydy –