Symfony + Doctrine + MySQL Replication
September 11, 2009 – 1:57 am网站架构加入mysql读写分离,是流行的做法。下面记录一下如何如何让采用symfony框架的产品加入mysql读写分离,我们使用doctrine实现数据操作。
在database.yml里输入:
- all:
- master:
- class: sfDoctrineDatabase
- param:
- dsn: 'mysql:host=localhost;dbname=mydb'
- username: master
- password: master
- option: charset=utf8
- slave:
- class: sfDoctrineDatabase
- param:
- dsn: 'mysql:host=localhost;dbname=mydb'
- username: slave
- password: slave
- option: charset=utf8
master和slave的前后顺序取决于你的具体需求,doctrine数据模型默认读取最后一个,由于一般网站大部分操作都是读操作,所以我们把slave写在后面了。
具体数据操作代码如下:
- //插入
- $add = new Tblusers();
- $add->username = "username";
- $add->password = "passwd";
- $add->save(Doctrine_Manager::getInstance()->getConnection('master'));
- //编辑
- $query = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection('master'))
- ->update('Tblusers a')
- ->set('a.username = ?',"username")
- ->where('a.uid = ?',2)
- ->execute();
- //显示
- $rs = Doctrine_Query::create()
- ->from('Tblusers a')
- ->where('a.username = ?',"username")
- ->fetchArray();
- //删除
- $del = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection('master'))
- ->delete()
- ->from('Tblusers a')
- ->where('a.username = ?',"username")
- ->execute();
除此以外,Doctrine官方网站上的cookbook还介绍了通过添加自定义类(继承自Doctrine_Query)来实现。