您的位置:首页 > 编程语言 > PHP开发

65 模型层thinkphp看书总结

2015-07-17 02:30 645 查看
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_',

//其他配置参数

// ...

7.读写分离
'DB_RW_SEPARATE'=>true,
8.非法html代码可以使用htmlspecialchars进行编码,以防止用户提交的html代码在展示时被执行
$_POST['title'] = htmlspecialchars($_POST['title']);
9.查询锁定
$list = $User->lock(true)->where('status=1')->order('create_time')->limit(10)->select();
10.字段排除
$Model->field('create_time,read_count,comment_count',true);
11.事物支持

// 在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操作方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: