(CakePHP) 現在使用しているデータベースの種類を知りたい

【最終更新 2012-09-09】


テスト環境ではMySQL、本番ではSQLiteを使う、など、ひとつのCakePHPが数種類のデータベースを使う場合があって、現在使用しているデータベースによって処理を分けたいとき。
Config/database.php に記述したデータベースとの接続設定から、使用中のDBを知ることができます。
以下、モデル内で実行する場合です。


CakePHP 2.2.0


(モデル)
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"などが入る。
$this->useDbConfigには、モデルで使用する接続設定の名前が入っています。
デフォルトは"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"などが入る。