Also, this sounds like a great idea for ZF 2.0, people are lining up a huge list of sweeping, BC-breaking changes for the 2.0 release, why not add this to the pile?
On Fri, Aug 14, 2009 at 9:48 AM, johncongdon <j...@johncongdon.com> wrote: > > Are you able to make your solution public? I am looking for this very > thing > and would prefer to stand on the shoulders of giants rather than trying to > eat a ton of calories to become one myself.... :) > > > > > william0275 wrote: > > > > We are switching to a replicated database environment and I've been > > studying the class hierarchy in the Zend Framework to find the best way > to > > handle this. Since it seems ZF makes poor use of interfaces, classes like > > Zend_Db_Table checks for an instance of Zend_Db_Adapter instead of a > > similar interface. > > > > I've seen solutions on the web having to do with extending Zend_Db_Table. > > > > I think I found a better solution and would like to suggest it here for > > people who might have the same dillema in the future. > > > > I think extending Zend_Db_Table is the wrong idea, because it means > you're > > limited to Zend_Db_Table to handle your master/slave architecture. If you > > extend Zend_Db_Adapter instead, you will have master/slave functionality > > at the core, not only in Zend_Db_Table. > > > > I did extend Zend_Db_Adapter with the concept that the instance of this > > Zend_Db_Adapter is for the master connection, and internally I create a > > second adapter which will be used for the slave. Methods like insert, > > update and delete are not overriden because they always work directly > with > > the master. I overrode all fetch methods (fetchAll, fetchAssoc, etc) so > > that it uses the slave adapter instead, remapping the calls. > > > > I added a forceAdapter() method to force the use of the "master" > > connection throughout a series of queries, so that in some circumstances > > you can select data from the master to make sure you get the newly > updated > > data right away. > > > > Now, my MyCompany_Db_Adapter_Pdo_Mysql will automatically handle reads > and > > writes to the right server. When I create the instance I pass it a series > > of parameters, like before, with a new parameter called 'slave' which > > contains it's own series of connection parameters. If the 'slave' array > > isnt present, the adapter works the traditionnal way. > > > > Anyhow, unless there are other better alternatives, I suggest you do it > > this way, you'll then be able to use this class with most Zend_Db classes > > like Zend_Db_Table. It's a shame the Zend Framework team didnt use > > interfaces in an extensive way, I might have chosen other alternatives if > > classes like Zend_Db_Table validated the adapter against a > > DbAdapterInterface (for example) instead of Zend_Db_Adapter. > > > > -- > View this message in context: > http://www.nabble.com/Handling-MySQL-replication-with-Zend_Db_Adapter-and-Zend_Db_Table-tp21812347p24964652.html > Sent from the Zend Framework mailing list archive at Nabble.com. > >