J'ai une application web CakePHP 3.4.6. En raison du fait qu'il fonctionne avec les tables de base de données héritées (non écrites dans Cake convention), nous avons choisi de coder manuellement toutes nos requêtes SQL plutôt que d'essayer de configurer les classes Table
et Entity
. Je sais que certaines personnes ne seront pas d'accord avec cela, mais ce n'est pas le but de la question. J'ai 3 bases de données: app_db
, users_db
, extra_db
.CakePHP 3 - utiliser plusieurs connexions de base de données * sans ORM *
J'ai connexions configuré pour chacun dans config/app.php
tel que:
'Datasources' => [
'default' => [], // 'app_db' credentials
'users_db' => [], // 'users_db' credentials
'extra_db' => [], // 'extra_db' credentials
];
J'ai un fichier de modèle personnalisé situé à src/Model/MyModel.php
. Un exemple de celui-ci étant utilisé pour faire une requête sur un des bases de données (app_db
) fonctionne comme ceci:
namespace App\Model;
use Cake\Datasource\ConnectionManager;
class MyModel
{
protected $connection;
public function __construct()
{
$this->connection = ConnectionManager::get('default');
}
public function getData()
{
$sql = ''; // some SQL query
$stmt = $this->connection->prepare($sql);
$stmt->execute();
return $stmt->fetchAll('assoc');
}
}
Cela fonctionne parce qu'il obtient la connexion pour default
qui mappe app_db
. Mais, je veux maintenant exécuter une requête qui doit obtenir des données de app_db
et JOIN avec des données de users_db
.
Comment est-ce que je configure ceci dans le modèle pour que le SQL communique avec les autres bases de données?