ユーザごとに接続先を変更するための方法について覚書
1.接続先の追加
接続先はconfig/app.phpに複数設定が可能です。'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
],
'anothreConnection' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
]
],
2.テーブル単位での指定
テーブルに、defaultConnectionNameメソッドを追加し、接続先名を指定するとテーブル単位での指定が可能です。class MyTable extends Table
{
public static function defaultConnectionName() {
return 'anothreConnection';
}
}
このメソッドは静的メソッドなので、ユーザごとに接続先を変えるのには向きません
(CAKEPHPでは$_SESSIONではなくsessionクラスを推奨しているため)
3.コントロール単位での指定
クエリ毎に設定を変える必要があるならConnectionManagerで接続情報を取得し、$this->connectionで設定します。
use Cake\Datasource\ConnectionManager;
$conn = ConnectionManager::get('anothreConnection');
$this->connection($conn);
こちらであれは、セッションにユーザごとの接続先情報を格納できます。