thinkphp模块部分学习
2015-07-20 14:45
597 查看
1.数据创建 create方法,可以连贯操作,生成$data用于save or add
2.数据写入 使用add
3.数据查询,使用find 查询一条数据,返回的是一维数组,使用select方法返回二维数组
4.数据修改:save方法的返回值是影响的记录数,如果返回false则表示更新出
错,因此一定要用恒等来判断是否更新失败。
查询语言
使用数组或者对象作为查询条件,因为更加安全
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
表达式含义协助记忆
EQ 等于(=) equal
NEQ 不等于(<>) not equal
GT 大于(>) greater
EGT 大于等于(>=) equal or greater
LT 小于(<) less than
ELT 小于等于(<=) equal or less than
LIKE 模糊查询
[NOT ] BETWEEN (不在)区间查询
[NOT ] IN (不在)IN 查询
EXP 表达式查询,支持SQL语法expression
不同字段不同的查询条件
$User = M("User"); // 实例化User对象
$map['status&title'] =array('1','thinkphp','_multi'=>true);
// 把查询条件传入查询方法
$User->where($map)->select();
上面的查询等效于:
$User = M("User"); // 实例化User对象
$map['status'] = 1;
$map['title'] = 'thinkphp';
// 把查询条件传入查询方法
$User->where($map)->select();
'
区间查询
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运
算。
EXP:$map['id'] = array(array('neq',6),array('gt',3),'and');
组合查询
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括
字符串模式查询( _string )、复合查询( _complex )、请求字符串查询(
_query ),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索
引方式,索引相同的特殊查询会被覆盖。
在数组查询中通过 $map[''_string'']来加入字符串条件
复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以
可以完成比较复杂的查询条件组装。 例如:
$where['name'] = array('like', '%thinkphp%');
$where['title'] = array('like','%thinkphp%');
$where['_logic'] = 'or';
$map['_complex'] = $where;
$map['id'] = array('gt',1);
ThinkPHP3.2.3完全开发手册
© 本文档使用 看云 构建 - 220 -
查询条件是
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp
%') )
统计查询
在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的
用户数、所有用户的最大积分、用户的平均成绩等等,T hinkPHP为这些统计操
作提供了一系列的内置方法,包括:
方法说明
Count 统计数量,参数是要统计的字段名(可选)
Max 获取最大值,参数是要统计的字段名(必须)
Min 获取最小值,参数是要统计的字段名(必须)
Avg 获取平均值,参数是要统计的字段名(必须)
Sum 获取总分,参数是要统计的字段名(必须)
验证规则
数据验证可以进行数据类型、业务规则、安全判断等方面的验证操作。
数据验证有两种方式:
1. 静态方式:在模型类里面通过$_validate属性定义验证规则。
2. 动态方式:使用模型类的validate方法动态创建自动验证规则。
自动验证 定义相关$validate 模型类中的$_validate
array(
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
......
);
自动完成 定义相关$_auto 与$auto
array(
array(完成字段1,完成规则,[完成条件,附加规则]),
array(完成字段2,完成规则,[完成条件,附加规则]),
......
);
占位符是一个什么东西,还需要加强学习。
D方法默认操作的模型层由DEFAULT _M_LAYER 参数配置,我们可以改变默
认操作的模型层为Logic层,例如:
'DEFAULT _M_LAYER' => 'Logic', // 默认的模型层名称
这样,当我们调用:
$User = D('User');
的时候其实是实例化的 UserLogic 类,而不是UserModel 类。
一个模型根据业务模型的复杂程度可以同时定义多个关联,不受限制,所有的关
联定义都统一在模型类的 $_link 成员变量里面定义,并且可以支持动态定义。
要支持关联操作,模型类必须继承T hink\Model\RelationModel 类,关联定
义的格式是:
namespace Home\Model;
use T hink\Model\RelationModel;
class UserModel extends RelationModel{
protected $_link = array(
'关联1' => array(
'关联属性1' => '定义',
'关联属性N' => '定义',
),
'关联2' => array(
'关联属性1' => '定义',
'关联属性N' => '定义',
),
'关联3' => HAS_ONE, // 快捷定义
...
);
}
高级模型 通过继承advmodel来实现
序列化字段
序列化字段是新版推出的新功能,可以用简单的数据表字段完成复杂的表单数据
存储,尤其是动态的表单数据字段。 要使用序列化字段的功能,只需要在模型
中定义serializeField属性,定义格式如下:
protected $serializeField = array(
'info' => array('name', 'email', 'address'),
);
文本字段
T hinkPHP支持数据模型中的个别字段采用文本方式存储,这些字段就称为文本
字段,通常可以用于某些T ext或者Blob字段,或者是经常更新的数据表字段。
要使用文本字段非常简单,只要在模型里面定义blobFields属性就行了。例如,
我们需要对Blog模型的content字段使用文本字段,那么就可以使用下面的定
义:
Protected $blobFields = array('content');
悲观锁( Pessimistic Locking )
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及
来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将
数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据
库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现
了加锁机制,也无法保证外部系统不会修改数据)。 通常是使用for update子
句来实现悲观锁机制。
T hinkPHP支持悲观锁机制,默认情况下,是关闭悲观锁功能的,要在查询和更
新的时候启用悲观锁功能,可以通过使用之前提到的查询锁定方法,例如:
$User->lock(true)->save($data);// 使用悲观锁功能
乐观锁( Optimistic Locking )
相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下
依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数
据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。 如一
个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行
修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过
程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操
作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面
对几百上千个并发,这样的情况将导致怎样的后果。乐观锁机制在一定程度上解
决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何
谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,
一般是通过为数据库表增加一个 “version” 字段来实现
Mongo模型
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
thinkphp又为其设计相应的模型类
2.数据写入 使用add
3.数据查询,使用find 查询一条数据,返回的是一维数组,使用select方法返回二维数组
4.数据修改:save方法的返回值是影响的记录数,如果返回false则表示更新出
错,因此一定要用恒等来判断是否更新失败。
查询语言
使用数组或者对象作为查询条件,因为更加安全
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
表达式含义协助记忆
EQ 等于(=) equal
NEQ 不等于(<>) not equal
GT 大于(>) greater
EGT 大于等于(>=) equal or greater
LT 小于(<) less than
ELT 小于等于(<=) equal or less than
LIKE 模糊查询
[NOT ] BETWEEN (不在)区间查询
[NOT ] IN (不在)IN 查询
EXP 表达式查询,支持SQL语法expression
不同字段不同的查询条件
$User = M("User"); // 实例化User对象
$map['status&title'] =array('1','thinkphp','_multi'=>true);
// 把查询条件传入查询方法
$User->where($map)->select();
上面的查询等效于:
$User = M("User"); // 实例化User对象
$map['status'] = 1;
$map['title'] = 'thinkphp';
// 把查询条件传入查询方法
$User->where($map)->select();
'
区间查询
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运
算。
EXP:$map['id'] = array(array('neq',6),array('gt',3),'and');
组合查询
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括
字符串模式查询( _string )、复合查询( _complex )、请求字符串查询(
_query ),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索
引方式,索引相同的特殊查询会被覆盖。
在数组查询中通过 $map[''_string'']来加入字符串条件
复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以
可以完成比较复杂的查询条件组装。 例如:
$where['name'] = array('like', '%thinkphp%');
$where['title'] = array('like','%thinkphp%');
$where['_logic'] = 'or';
$map['_complex'] = $where;
$map['id'] = array('gt',1);
ThinkPHP3.2.3完全开发手册
© 本文档使用 看云 构建 - 220 -
查询条件是
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp
%') )
统计查询
在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的
用户数、所有用户的最大积分、用户的平均成绩等等,T hinkPHP为这些统计操
作提供了一系列的内置方法,包括:
方法说明
Count 统计数量,参数是要统计的字段名(可选)
Max 获取最大值,参数是要统计的字段名(必须)
Min 获取最小值,参数是要统计的字段名(必须)
Avg 获取平均值,参数是要统计的字段名(必须)
Sum 获取总分,参数是要统计的字段名(必须)
验证规则
数据验证可以进行数据类型、业务规则、安全判断等方面的验证操作。
数据验证有两种方式:
1. 静态方式:在模型类里面通过$_validate属性定义验证规则。
2. 动态方式:使用模型类的validate方法动态创建自动验证规则。
自动验证 定义相关$validate 模型类中的$_validate
array(
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
......
);
自动完成 定义相关$_auto 与$auto
array(
array(完成字段1,完成规则,[完成条件,附加规则]),
array(完成字段2,完成规则,[完成条件,附加规则]),
......
);
占位符是一个什么东西,还需要加强学习。
D方法默认操作的模型层由DEFAULT _M_LAYER 参数配置,我们可以改变默
认操作的模型层为Logic层,例如:
'DEFAULT _M_LAYER' => 'Logic', // 默认的模型层名称
这样,当我们调用:
$User = D('User');
的时候其实是实例化的 UserLogic 类,而不是UserModel 类。
一个模型根据业务模型的复杂程度可以同时定义多个关联,不受限制,所有的关
联定义都统一在模型类的 $_link 成员变量里面定义,并且可以支持动态定义。
要支持关联操作,模型类必须继承T hink\Model\RelationModel 类,关联定
义的格式是:
namespace Home\Model;
use T hink\Model\RelationModel;
class UserModel extends RelationModel{
protected $_link = array(
'关联1' => array(
'关联属性1' => '定义',
'关联属性N' => '定义',
),
'关联2' => array(
'关联属性1' => '定义',
'关联属性N' => '定义',
),
'关联3' => HAS_ONE, // 快捷定义
...
);
}
高级模型 通过继承advmodel来实现
序列化字段
序列化字段是新版推出的新功能,可以用简单的数据表字段完成复杂的表单数据
存储,尤其是动态的表单数据字段。 要使用序列化字段的功能,只需要在模型
中定义serializeField属性,定义格式如下:
protected $serializeField = array(
'info' => array('name', 'email', 'address'),
);
文本字段
T hinkPHP支持数据模型中的个别字段采用文本方式存储,这些字段就称为文本
字段,通常可以用于某些T ext或者Blob字段,或者是经常更新的数据表字段。
要使用文本字段非常简单,只要在模型里面定义blobFields属性就行了。例如,
我们需要对Blog模型的content字段使用文本字段,那么就可以使用下面的定
义:
Protected $blobFields = array('content');
悲观锁( Pessimistic Locking )
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及
来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将
数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据
库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现
了加锁机制,也无法保证外部系统不会修改数据)。 通常是使用for update子
句来实现悲观锁机制。
T hinkPHP支持悲观锁机制,默认情况下,是关闭悲观锁功能的,要在查询和更
新的时候启用悲观锁功能,可以通过使用之前提到的查询锁定方法,例如:
$User->lock(true)->save($data);// 使用悲观锁功能
乐观锁( Optimistic Locking )
相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下
依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数
据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。 如一
个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行
修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过
程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操
作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面
对几百上千个并发,这样的情况将导致怎样的后果。乐观锁机制在一定程度上解
决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何
谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,
一般是通过为数据库表增加一个 “version” 字段来实现
Mongo模型
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
thinkphp又为其设计相应的模型类
相关文章推荐
- 一种基于PTP 协议的局域网高精度时钟同步方法(转)
- 浅谈MSTP时延与带宽和速率的关系
- 国外的php mcv框架
- YII2依赖注入和事件的使用
- phpstorm配置关联php手册
- php -- php数组相关函数
- php定时输出
- YII2 整合smarty
- php生成过去100年下拉列表的方法
- PHP基于文件存储实现缓存的方法
- ntpdate[18977]: the NTP socket is in use, exiting解决
- php获胜的算法的概率,它可用于刮,大转盘等彩票的算法
- vsftpd-3.0.2源码编译安装配置指南
- PHP水印类
- PHP 数据库基本操作
- php将数组写入配置文件
- LTProf ---windows下程序的性能分析工具
- 详解PHP错误日志的获取方法
- 使用xhprof进行线上PHP性能追踪及分析
- 自定义控件(二):详解设置view属性内部流程