山山未迟

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、 模型

1、 什么是模型

模型表示企业数据和业务规则

2、 定义模型

Lib/Model下

文件命名规则:

表名(首字母大写)Model.class.php

模型内代码:

class 表名(首字母大写)Model  extends Model{

}

在tp中,如果没有特殊的业务要求,可以直接使用Model类,而不需要定义子类模型,但推荐使用子类模型(自定义模型)

数据表:

wps9659.tmp

文件:

wps9669.tmp

代码:

wps966A.tmp

我们尝试去实例化这个模型类对象:

wps967B.tmp

运行:

wps968C.tmp

说明:tp中的模型,被实例化的同时会自动创建与数据库连接

3、 配置数据库信息

在配置文件config.php中,添加以下信息

wps968D.tmp

再重新运行以上程序:

wps969D.tmp

看到上图,说明配置信息添加成功。

wps96AE.tmp

wps96BE.tmp

通过上图,可以看出,tp模型被实例化时,会自动解析当前模型对应的数据表的表结构

4、 实例化模型对象

我们目前使用的模型主要分两种:

1) 自定义模型

GoodsModel

UserModel

2) 基础模型

在tp中,实例化模型主要有两种形式:

1) 直接实例化

$goods=new GoodsModel();

2) 快速实例化

$goods=D(‘Goods’);

tp 中实例化模型的四种方式:

1) 直接实例化用户自定义模型

2) 快速实例化用户自定义模型

3) 直接实例化基础模型

4) 快速实例化基础模型

wps96CF.tmp

5、 CURD操作

l 创建操作(Create)

l 读取数据(Read)

l 更新数据(Update)

l 删除数据(Delete)

1) 创建操作

$admin=new AdminModel();

$row=array(

‘name’=>‘zhangsan’,

‘age’=>30 );

$admin->add($row);

wps96E0.tmp

2) 更改操作

$admin=new AdminModel();

$data=array();

$admin->save($data);

wps9700.tmp

3) 删除操作

$admin=new AdminModel();

$admin->delete(‘4,5,6’)

wps973F.tmp

4) 查询操作

select();

查询多条数据时使用,结果永远是一个二维数组,即使结果只有一条数据

find();

永远返回一条数据,所以返回值是一个一维数组

wps978F.tmp

运行:

wps97ED.tmp

6、 字段缓存

当实例化模型对象时,会自动将这个对应的表中的字段信息缓存下来

l 字段缓存保存在Runtime/Data/_fields/ 目录下面

wps982D.tmp

l 只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。

wps9937.tmp

l 可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存

wps9938.tmp

l 可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,在模型类里面添加fields属性即可

7、 字段定义

在子类模型中,使用以下属性定义表中所有字段信息

语法:

l protected $fields=array(

‘id’,

‘username’,

‘password’,

‘_pk’=>‘id’,

‘_autoinc’=>true

);

模型:

wps9949.tmp

定义字段时是定义在子类模型中,但如果实例化父类模型,那么程序还会重新解析表结构。

如果使用定义字段功能,那么实例化时必须使用子类模型。

8、 创建数据

ThinkPHP可以帮助你快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象,这个优势在一个数据表的字段非常之多的情况下尤其明显。

语法:

l 从表单中创建数据

$User->create();

l 从数组中创建数据

$User->create($data);

控制器:

wps9989.tmp

当对象调用create方法时,这个方法默认会从$_POST获取数据,再将这个数据放在$category对象的data属性中,当对象调用add方法时,如果没有向函数传递参数,那么会自动从这个对象data属性中读取数据,并完成录入。

wps998A.tmp

wps999A.tmp

create方法的本质是从一个数组中创建数据。

如果一个表单以get形式提交数据,我们也想使用创建数据的功能,可以使用

$category->create($_GET);

创建数据功能必须依赖一个条件:

表单中元素的名字必须和数据表中的名字保持一致,但这样一来,会在客户端源文件暴露数据表结构的真实字段名,如何解决?

9、 字段映射

ThinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能

语法:

protected $_map = array(

‘name'   => ‘username',

‘pwd’ => ‘userpwd’

‘假名’ => ‘真名’

);

模型:

wps99AB.tmp

字段映射原理:

$data = $User->parseFieldsMap($data);

wps99BB.tmp

可以看出,如果type的值为1,表示将真名元素转为假名元素

如果type的值为0,表示将假名元素转为真名元素

posted on 2016-05-07 23:13  山山未迟  阅读(151)  评论(0编辑  收藏  举报