Vous devez suivre les étapes ci-dessous pour utiliser plusieurs sources de données dans la même application cakephp.
Mentionnez plusieurs sources de base de données dans Config/app.php
Vous devez gérer plusieurs configurations de source de données, dans la source de données par défaut, conserver la base de données principale et créer une autre source de données, nous pouvons dire qu'il s'agit d'un historique pour la deuxième source de données. Comme mentionné ci-dessous
'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),
]
]
Spécifiez la source de données dans les classes de tableaux
Dans Src/Model/Table/<AnyOtherSource>Table.php
, Ajoutez la méthode ci-dessous, où vous souhaitez utiliser la source de données de l'historique. Pas besoin d'ajouter la méthode ci-dessous où vous devez utiliser la source de données par défaut, pour la source de données par défaut, CakePHP s'en chargera.
public static function defaultConnectionName() {
return 'history';
}
Rejoindre et modèler l'association dans CakePHP 3
Ajoutez le code ci-dessous dans Src/Model/Table/<All>Table.php
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
}