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.
>
>

Reply via email to