多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
AnPHP在更新后会自动读取主库,但是在阿里云数据库中,是自动进行读取分离的,因为只有一个数据库连接,所以必须通过指定的参数才能实现强制读取。 强制读取主库也有利于程序的调优和一性特点应用,如事务等。 用以下两种方法来实现: ### 1、全局设置 #### 1.1 打开强读 `AnDB::$FORCE_MASTER_OPEN = 1; // 已默认为0` #### 1.2 设定强读主库的方法 `AnDB::$FORCE_MASTER = ‘/*FORCE_MASTER*/’; // 已默认设置 ` ### 2、局部设置(自动加载全局设置)为真优先 #### 2.1 打开强读 `_model()->db->FORCE_MASTER_OPEN = 1; // 如果未设置,执行完成更新类操作后,会自动设置为 1` #### 2.2 设定强读主库的方法 `_model()->db->FORCE_MASTER = ‘/*FORCE_MASTER*/’; // 如果未设置自动加载 AnDB::$FORCE_MASTER ` ### 实现原理 ***** * AnDB 类添加两个静态变量 * `AnDB::$FORCE_MASTER = '/*FORCE_MASTER*/`;' // 2018-09-03 默认为阿里数据库强制读主库 * `AnDB::$FORCE_MASTER_OPEN = 0; `// 2018-09-03 云数据库强制读主库,通过添加注释的方式实现 * 在执行完`_model()-> udpate()\delete()\create()`后,再执行读方法`_model()->read()、getList()、getFields()、 getTotal()`,会自动添加读主库的SQL注释,其它方法不会自动添加 * 原理 * db对象判断自身 `db->FORCE_MASTER_OPEN `和 `db->FORCE_MASTER` 的设置,可以自行赋值改变以上行为 * db对象在执行`read()\ getList()\ getFields()\getTotal()`会自动在执行的SQL语句添加 默认的前缀,以达到云数据的强制读取主库的目的