• 20150316--TP-02


    一、 模型

    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,表示将假名元素转为真名元素

  • 相关阅读:
    RStudio 的使用
    R 语言文件读写
    R 语言文件读写
    matlab 编程的细节问题
    matlab 编程的细节问题
    matlab 图像分块及恢复
    matlab 图像分块及恢复
    matlab 高级函数 —— colfilt/blockproc (图像)矩阵的分块处理
    结构体/类中的弹性数组---元素个数为0的数组
    28.uva 10891 Game of Sum 记忆化dp
  • 原文地址:https://www.cnblogs.com/lifushan/p/5469481.html
Copyright © 2020-2023  润新知