CakePHP2系とCakePHP1系のDB設定周りの違い

引き続きPHPのフレームワークの話題。
今度はとある環境でCakePHP2.0を利用しようとしたお話。

CakePHP1.X系と同じ感じで使おうと思ったら、ちょっと調整が必要になったのでそのときのメモ。

1.DBを紐づけているモデルで「Database connection “Mysql” is missingCake is NOT able to connect to the database.Database connection “Mysql” is missing, or could not be created.」というエラーがでた。

CakePHP2.0からはPDO経由でDBに接続するようになってた。
PHPにPDO各様モジュールをインストールする必要がある。
PDOが入っていても、利用したいDBのドライバが入っていない場合もあるので注意

2.DATABASE_CONFIGでhostにポート番号も設定するとエラーになる。

CakePHP1.X系では以下のような記述が可能だったのだが、CakePHP2.X系からは
Error: SQLSTATE[HY000] [2005] Unknown MySQL server host ’127.0.0.1:3306′ (3) requires a database connection
というエラーが出る。

public $default = array(
'datasource' => 'Database/Mysql' ,
'persistent' => false ,
'host' => '127.0.0.1:3306',
'login' => 'user',
'password' => 'passwd' ,
'database' => 'cakedb' ,
'prefix' => '',
'encoding' => 'utf8' ,
);

ポート指定に対応するためにはこんな感じに変更する。

public $default= array(
'datasource' => 'Database/Mysql' ,
'persistent' => false ,
'host' => '127.0.0.1',
'port' => '3306',
'login' => 'user',
'password' => 'passwd' ,
'database' => 'cakedb' ,
'prefix' => '',
'encoding' => 'utf8' ,
);

3.環境によってDBの接続情報を変える
これはCakePHP1.X系の設定をそのまま持ってこれた。
AppModelで$useDbConfigを上書き

class AppModel extends Model {
    public function __construct($id = false, $table = null , $ds = null) {
        if (defined('DEBUG_PREFIX' )) {
            $this-> useDbConfig = DEBUG_PREFIX;
        }
        parent::__construct($id, $table, $ds);
    }
}