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

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又为其设计相应的模型类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: