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?