2017-03-14 7 views
1

Ich möchte mit CakePHP 3 eine Verbindung zu einer zweiten (Remote-) Datenbank herstellen. Ich habe online Lösungen gefunden, die vorschlagen, verschiedene Modelle mit verschiedenen Datenbanken zu verbinden, aber das ist nicht was ich erreichen muss.CakePHP 3 Mehrere Datenbanken

Ich muss in der Lage sein, eine Verbindung zu einer entfernten Datenbank herzustellen (die keinem Modell zugeordnet ist) und einige Datensätze von einer Aktion in meinem Controller zu lesen/schreiben. Kann dies mit CakePHP erreicht werden?

bearbeiten (weitere Informationen):

Ich habe eine Website, die für Hotelzimmer als Buchungsplattform fungiert. Die Verfügbarkeit dieser Räume kann über meine Website kontrolliert und in meiner Datenbank gespeichert werden. Aber für einige Kunden möchte ich in der Lage sein, direkt mit ihrer privaten Datenbank zu verbinden und ihre Datensätze zu verwenden, um die Verfügbarkeit zu überprüfen.

+0

Wenn Sie schreiben müssen in einer Tabelle in einer Datenbank können Sie auch ein Modell dafür erstellen ... Ich verstehe nicht den Teil, der keinem Modell zugeordnet ist. Es ist möglicherweise nicht Teil Ihrer Hauptdatenstruktur, aber es sind immer noch strukturierte Daten. – JvO

+0

@JvO Danke für Ihre Antwort! Hier ist das Ding. Ich habe eine Website, die als Buchungsplattform für Hotelzimmer dient. Die Verfügbarkeit dieser Räume kann über die Website gesteuert und in meiner Datenbank gespeichert werden. Aber für einige Kunden möchte ich in der Lage sein, direkt mit ihrer privaten Datenbank zu verbinden und ihre Datensätze zu verwenden, um die Verfügbarkeit zu überprüfen. Muss ich für jeden Client ein benutzerdefiniertes Modell erstellen? – Cellydy

+0

Bietet diese Kunden nicht eine API, auf die Sie zugreifen können? Warum würden Sie die Datenbank direkt abfragen? Nur neugierig – yBrodsky

Antwort

1

Gehen Sie wie folgt

Schritt 1: öffnen config/app.phpDatasources Array Finden und Remote Database Konfiguration wie als Add -

'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), 
    ], 

Schritt 2: Jetzt yo u kann wie Remote database in Ihrem Controller zugreifen as-

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

Hinweis: Jetzt Sie PDO Methoden verwenden, können Sie auf Einfügen, Retrieve, Update

Beispiel:

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

Fantastisch! Genau das, was ich gesucht habe. Vielen Dank! – Cellydy

+0

Gern geschehen! @ Kellydy –