zoukankan      html  css  js  c++  java
  • 【ThinkPHP框架3.2版本学习总结】三、模型

    1. 模型的定义

    模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型类的后缀定义Model。

    基本语法:模型类名称(表名去前缀,首字母大写)Model.class.php

    2. 实例化模型类

    3. 数据库配置

    4. CURD操作

    (1)数据写入add()

    (2)数据读取find()、select()

    (3)数据更新save()

    (4)数据删除delete()

    5. 定义字段

    (1)存在问题

    无论我们初始化自定义模型还是系统模型,系统都会自动连接数据库,并检索相关信息,但是这样会增加数据库服务器的开销,如何解决呢?

    (2)字段缓存

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

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

    当我们第二次运行时,系统自动调用缓存文件,如下图所示

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

    当我们设置以上参数为false,每次初始化模型类都会自动解析数据库

    注:实际开发中,由于数据中的字段经常发生变化,所以可以关闭字段缓存。

    以上解决办法可以解决数据库服务器的开销,但是由于需要读取字段缓存文件,所以会造成服务器的I/O开销,如何解决呢?

    ③字段缓存

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

    注:由于我们的字段缓存是写在自定义模型中,所以只能通过实例化自定义模型才可以使用字段缓存。

    6. 创建数据create()

    (1)存在问题

    在实际项目开发中,可能会有多个表单(信用卡申请、银行结算),这样会遇到一个问题,我们难道需要一个一个表单进行接收么?

    (2)解决方法

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

    (3)源码分析(create)



    调用我们系统调用create方法时,当整个流程运行完毕后,系统会将传递过来的值复制到$this->data属性中,并把接收数据作为$data返回。

    (4)安全漏洞问题

    ①篡改表单

    ②如何解决?(在模型里面增加一个$insertFields 属性)

    或者

    ③修改Controller里面的create方法的参数

    (5)I方法使用

    I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:

    I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源']);

    注意:

    变量类型不区分大小写。
    变量名则严格区分大小写。
    默认值和过滤方法均属于可选参数。

    例:echo I('get.page',1);相当于isset($_GET['page'])?$_GET['page']:1

    7. 字段映射

    (1)存在问题

    通过create方法我们可以很容易的接收到表单传递过来的数据,要求表单元素名要与数据库中表字段信息一一对应,但是这样容易暴漏我们数据库中的表结构。

    (2)解决方法

    ①更改表单元素名称

    ②设置自定义模型CategoryModel.class.php,添加$_map属性

    ③添加结果

    ④应用场景:主要用于隐藏数据库中的表的结构信息

    8. 表名操作

    9. 事务处理

    事务处理流程:开启事务-提交事务-事务回滚

    数据引擎必须采用InnoDB

    10. AR操作模式

    表映射到类
    字段映射到属性
    记录映射到对象

    (1)增加操作

    (2)删除操作

    (3)更新操作

    (4)查询操作

    (5)连贯操作

    where:查询条件 类似MySQL语句的where子句
    order:排序
    limit:限制条件
    field:查询的字段 select title,description,content from
    group:分组查询
    find:查询数据,返回一维数组
    select:查询数据,返回二维数据
    find与select方法必须连贯操作的最后端

    field相关操作

    (6)统计操作

    count:统计所有记录
    max:统计最大值
    min:统计最小值
    avg:统计平均数
    sum:汇总(求和)

  • 相关阅读:
    react 采坑记录
    理解JS 模块化
    MongoDB使用教程
    scss
    gulp 使用教程
    node.js 简单入门
    jQuery
    jQuery
    php+mysql+bootstrap 实现成绩管理系统
    SVN的commit功能用bat实现
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522293.html
Copyright © 2011-2022 走看看