1.关闭字段缓存
‘DB_FIELDS_CACHE’ => false
2.获取字段信息 主键
$pk = $Model->getPk()
$fields = $User -> getDbfields ();
3.模型层可以手动定义数据表字段名称 避免IO加载开销
protected fields = array (
'id', 'username', 'passwrod', ' _pk' =>'id', '_autoinc' =>true
);
4.跨库操作
protected 'dbName' = ' info';
protected '_tablePrefix' = '_other';
5.切换数据库
$this->db(1,"mysql://root:123456@localhost:3306/test")->query("查询SQL");
$this->db(1)->query("查询SQL");
6.分布式数据库
- return array(
- //分布式数据库配置定义
- 'DB_TYPE' => 'mysql', //分布式数据库类型必须相同
- 'DB_HOST' => '192.168.0.1,192.168.0.2',
- 'DB_NAME' => 'thinkphp', //如果相同可以不用定义多个
- 'DB_USER' => 'user1,user2',
- 'DB_PWD' => 'pwd1,pwd2',
- 'DB_PORT' => '3306',
- 'DB_PREFIX' => 'think_',
- //其他配置参数
- // ...
- // 在User模型中启动事务
- $User->startTrans();
- // 进行相关的业务逻辑操作
- $Info = M("Info"); // 实例化Info对象
- $Info->save($User); // 保存用户信息
- if (操作成功){
- // 提交事务
- $User->commit();
- }else{
- // 事务回滚
- $User->rollback();
- }
12.高级模型功能
a.字段过滤
protected $_filter = array(
'content'=>array('function_1','function_2'),
)
b.延迟更新
$User->where('id=3')->setInc("score",10);// 用户的积分加10
c.分表
- protected $partition = array(
- 'field' => 'name',// 要分表的字段 通常数据会根据某个字段的值按照规则进行分表
- 'type' => 'md5',// 分表的规则 包括id year mod md5 函数 和首字母
- 'expr' => 'name',// 分表辅助表达式 可选 配合不同的分表规则
- 'num' => 'name',// 分表的数目 可选 实际分表的数量
- );
13.定义虚拟模型两种方式 仅用于封装业务逻辑
a. Protected $autoCheckFields = false;
b.Class UserModel { } //,不能再使用模型的CURD操作方法