Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbinden Sie sich mit mehreren Datenbanken in CakePHP 3

Sie müssen die folgenden Schritte ausführen, um mehrere Datenquellen innerhalb derselben Cakephp-Anwendung zu verwenden.

Erwähnen Sie mehrere Datenbankquellen in Config/app.php

Sie müssen mehrere Datenquellenkonfigurationen verwalten, in der Standarddatenquelle die Hauptdatenbank behalten und eine weitere Datenquelle erstellen, die wir als Verlauf für die zweite Datenquelle bezeichnen können. Wie unten erwähnt

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '<host name>',
        'username' => '<database user>',
        'password' => '<database password>',
        'database' => '<database name>',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => true,
        'log' => false,
        'quoteIdentifiers' => false,
        'url' => env('DATABASE_URL', null),
    ],
    'history' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '<host name>',
        'username' => '<database user>',
        'password' => '<database password>',
        'database' => '<database name>',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => true,
        'log' => false,
        'quoteIdentifiers' => false,
        'url' => env('DATABASE_URL', null),
    ]
]

Datenquelle in Tabellenklassen angeben

In Src/Model/Table/<AnyOtherSource>Table.php , Fügen Sie unten die Methode hinzu, in der Sie die Verlaufsdatenquelle verwenden möchten. Es ist nicht erforderlich, die folgende Methode hinzuzufügen, bei der Sie die Standarddatenquelle verwenden müssen, für die Standarddatenquelle kümmert sich CakePHP darum.

public static function defaultConnectionName() {
    return 'history';
}

Beitreten und Modellverknüpfung in CakePHP 3

Fügen Sie den folgenden Code in Src/Model/Table/<All>Table.php hinzu

class LogsTable extends Table {

    public function initialize(array $config) {
        parent::initialize($config);

        $this->table($this->connection()->config()['database'] . "." . $this->table()); // this is very important for joining and associations.

        // your other code for initilize method
    }

    public static function defaultConnectionName() {
        return 'history';
    }

    // other methods and your code should be here

}