(CakePHP) 現在使用しているデータベースの種類を知りたい
【最終更新 2012-09-09】
テスト環境ではMySQL、本番ではSQLiteを使う、など、ひとつのCakePHPが数種類のデータベースを使う場合があって、現在使用しているデータベースによって処理を分けたいとき。
Config/database.php に記述したデータベースとの接続設定から、使用中のDBを知ることができます。
以下、モデル内で実行する場合です。
CakePHP 2.2.0
$this->useDbConfigには、モデルで使用する接続設定の名前が入っています。
(モデル)
class Post extends AppModel
{
function hoge()
{
$db = $this->getDatasource($this->useDbConfig)->config['datasource'];
//DBの種類ごとの分岐処理
if (preg_match('/mysql/i', $db)) {
...
}
}
}
// $dbには、"Database/MySQL"や"Database/SQLite"などが入る。
デフォルトは"default"です。
【参考】CakePHPのソースコード
lib/Cake/Model/ConnectionManager.php
lib/Cake/Model/Model.php
※ 以前は下記のコードを使っていましたが、Cake1.3との互換性や、コントローラ側でも使いやすく分かりやすい形にするため、上のコードに変更しました。
$db = ConnectionManager::$config->{$this->useDbConfig}['datasource'];
CakePHP 1.3
Cake2.xとほぼ同じですが、"datasource"ではなく、"driver"を参照しています。Caek2.xからは"DATABASE_CONFIG"の記述法が変わったので、当然ですね。
(モデル)
class Post extends AppModel
{
function hoge()
{
$db = $this->getDatasource($this->useDbConfig)->config['driver'];;
//DBの種類ごとの分岐処理
if (preg_match('/mysql/i', $db)) {
...
}
}
}
// $dbには、"mysql"や"sqlite"などが入る。