ただいまバックグラウンドにて画像を加工中です。

cakephp3.xmysqlデータベースを動的切り替え

2016年9月3日更新 view: 39 view
https://www.riscascape.net/wp-content/uploads/2015/03/mysql.png

条件

ひとつのコントローラー、アクションにて
・cakephp2.x で作った prefix 付きのテーブルのデータを取得
・cakephp3.x で作った テーブルのデータを取得

を同時に行う。

まずはapp.php の用意。

cakephp2.x で作ったDB情報にアクセスするように、
app.php の Datasources に以下を追記しておきましょう。
環境に合わせて変更してね。

'old' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,

'host' => '999.111.18.118',
'prefix' => 'rental_',
'username' => 'your',
'password' => 'yourpath',
'database' => 'customdb',
'encoding' => 'utf8',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
'log' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
'url' => env('DATABASE_TEST_URL', null),
],
スポンサードリンク

適当なコントローラーにて

<?php

namespace App\Controller;
use Cake\Datasource\ConnectionManager;
use Cake\Event\EventManager;

class ToolsController extends AppController
{
public function test()
{
// defaultの情報を読み込む
$this->loadModel('Peras');

$res = $this->Peras->find()
->limit(2)
->all();

pr($res);

//他のデータベースの切り替え
// app.php Datasources に 指定
$connection = ConnectionManager::get('old');
$results = $connection
->execute('SELECT * FROM rental_peras')//ここで直接SQLを組む必要がある
->fetchAll('assoc');

pr($results);
exit;
}

}

上記で
・peraモデルの情報を読み込みデータを取得
・さらに古いoldDBに接続してprefix付きのテーブル情報を取得

することができます。
cakephp3.xではprefix付きのテーブル設定ができないので、
こんな感じでやってもいいかもですね。

スポンサードリンク

関連記事

関連カテゴリ