{{ message }}
kunit/cakephp-master-slave
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
既にある程度システムが組まれていて、途中から Master/Slave 構成にする場合に、 既存のコードを極力変更せずに、Master/Slave 切り替えながら クエリー発行できるようにする。
アソシエーションがある場合にも対応する。
たとえば、User モデル に対して行う場合、 User モデルを継承した UserSlave モデルを作る。
以下のプロパティを追加する
$aliasは、親のモデルと同じものを設定する- 例えば、UserSlave モデルの場合は、
public $alias = 'User';となる
- 例えば、UserSlave モデルの場合は、
$useDbConfigは、database.php に設定した slave 用のエントリを設定する$useTableは、親のモデルと同じものを設定する- 例えば、UserSlave モデルの場合は、
public $useTable = 'users';となる
- 例えば、UserSlave モデルの場合は、
- 親のモデルにアソシエーションの定義がある場合、それ用の YyySlave モデルを同じように設定し、定義部分の class を Yyy から YyySlave に変更
例えば、以下のような設定になる
<?php
App::uses('User', 'Model');
class UserSlave extends User {
public $alias = 'User';
public $useDbConfig = 'slave';
public $useTable = 'users';
public $hasMany = array(
'Article' => array(
'className' => 'ArticleSlave',
'foreignKey' => 'user_id',
),
);
}class User extends AppModel {
public $actsAs = array('MasterSlave');
}<?php
$this->User = ClassRegistry::init('User');
$users = $this->User->getSlaveInstance()->find('all');$this->User->getSlaveInstance() の返却値は、 UserSlave モデルのインスタンスになる