Zend Framework应用程序层中的主/从切换
我正在编写一个应用程序,要求在应用程序层内发生主/从切换。 就像现在一样,我在创建映射器时实例化一个Zend_Db_Table对象,然后将setDefaultAdapter设置为从器件。
现在在基本映射器类中,我有以下方法:
public function useWriteAdapter()
{
if(Zend_Db_Table_Abstract::getDefaultAdapter() != $this->_writeDb)
{
Zend_Db_Table_Abstract::setDefaultAdapter($this->_writeDb);
$this->_tableGateway = new Zend_Db_Table($this->_tableName);
}
}
我需要对此进行完整性检查。 我不认为开销太大,我只是怀疑必须有更好的方法。
Zend_Db_Table_Row_Abstract
类型的对象会记住Table对象生成它的情况。 但是在调用save()
之前,您可以更改关联的表。
$readDb = Zend_Db::factory(...); // slave
$writeDb = Zend_Db::factory(...); // master
Zend_Db_Table::setDefaultAdapter($readDb);
$myReadTable = new MyTable(); // use default adapter
$myWriteTable = new MyTable($writeDb);
$row = $myTable->find(1234)->current();
$row->column1 = 'value';
$row->setTable($myWriteTable);
$row->save();
那么像扩展的基类那样执行启动的东西呢?
class My_Db_Table extends Zend_Db_Table
{
function init()
{
if (....) {
// set the default adaptor to the write-DB-master
}
parent::init();
}
}
// all your models then extend My_Db_Table instead of Zend_Db_Table
我发现这篇文章,我认为会回答你的问题:)
链接地址: http://www.djcxy.com/p/43761.html上一篇: Master / Slave switch in the Zend Framework application layer
下一篇: Java: How do I perform list operations with different definitions of equals?