config/database.phpにマスター、スレーブのdb接続設定を以下のように追加する。
例
$default=array(DB設定); //スレーブ
$default_master=array(DB設定); //マスター
saveなどの保存メソッドの場合は設定名に’_master’を付加して設定を切り切り替えて保存処理。
終わったら元に戻す。
なお、何らかの理由でafterSave()コールバックで別のモデルの保存処理を行った場合、2重で’_master’を
付加してしまうため ”(!stristr($oldDb,’_master’))” の判定を追加している。
app_model.phpに下記を追加する。
function save($data = null, $validate = true, $fieldList = array()) { // Remember the old config (default) $oldDb = $this->useDbConfig; // Set the new config if(!stristr($oldDb,'_master')){ $this->setDataSource($oldDb.'_master'); } // Call the original Model::save() method $return = parent::save($data, $validate, $fieldList); // Reset the config/datasource (default) $this->setDataSource($oldDb); return $return; } function updateAll($fields, $conditions = true) { $oldDb = $this->useDbConfig; if(!stristr($oldDb,'_master')){ $this->setDataSource($oldDb.'_master'); } $return = parent::updateAll($fields, $conditions); $this->setDataSource($oldDb); return $return; } function delete($id = null, $cascade = true) { $oldDb = $this->useDbConfig; if(!stristr($oldDb,'_master')){ $this->setDataSource($oldDb.'_master'); } $return = parent::delete($id, $cascade); $this->setDataSource($oldDb); return $return; } function deleteAll($conditions, $cascade = true, $callbacks = false) { $oldDb = $this->useDbConfig; if(!stristr($oldDb,'_master')){ $this->setDataSource($oldDb.'_master'); } $return = parent::deleteAll($conditions, $cascade, $callbacks); $this->setDataSource($oldDb); return $return; }