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;
}

