CURD(创建[Create]、更新[Updata]、读取[Read]、删除[Delete]),定义了用于处理数据的基本原子操作。

CURD在具体的应用中并非一定使用create、updata、read、delete字样的方法,但是他们完成的功能是一致的。

例如:

ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。

一、创建数据

CURD的Create操作通常会通过表单来提交数据,首先,我们在项目的Tpl/Form目录下面创建一个add.html模板文件,内容为:

<FORM method=”post” action=”_URL_/insert”>

标题:<input type=”text” name=”title”><br/>

内容:<textarea name=”content” rows=”5” cols=”45”></textarea><br/>

<input type=”submit” value=”提交”>

</form>

在项目的Action目录下面创建一个FormAction.class.php文件,暂时只需要定义FormAction类,不需要添加任何操作方法,代码如下:

Class FormAction extends Action {}

接下来,访问:http://localhost/app/index.php/Form/add

注意:

我们并没有在控制器里面定义add操作方法,但是很显然,访问是正常的。

原因:

因为ThinkPHP在没有找到对应操作方法的情况下,会检查是否存在对应的模板文件,由于我们有对应的add模板文件,所以控制器就直接渲染该模板文件输出了。

所以说对于没有任何实际逻辑的操作方法,我们只需要直接定义对应的模板文件就行了。

表单处理:

Class FormAction extends Action {

public function insert(){

$Form = D(‘Form’);

If($Form -> create()){

$result = $form->add();

If($result){

$this -> success(‘操作成功!’);

}else{

$this -> error(‘写入错误!’);

}

}else{

$this -> error($Form -> getError());

}

}

}

如果你的主键是自增类型的话,add方法的返回值就是该主键的值。

不是自增主键的话,返回值表示插入数据的个数。如果返回false则表示写入出错。

二、模型

建think_form表:

CREATE TABLE IF NOT EXISTS ‘think_form’ (

‘id’ smallint(4) unsigned NOT NULL AUTO_INCREMENT,

‘title’ varchar(255)  NOT NULL,

‘content’ varchar(255) NOT NULL,

‘create_time’ int(11) unsigned NOT NULL,

PRIMARY KEY (‘id’)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

注意:D函数和M函数不同,需要有对应的模型类。

创建模型类:

模型名的定义规范:模型名+Model.class.php(模型名的定义采用驼峰法并且首字母大写)

我们在项目的Lib/Model目录下面创建FormModel.class.php文件,添加代码如下:

Class FormModel extends Model {

//定义自动验证

Protected $_validate = array(

Array(‘title’,’require’,’标题必须’),

);

//完成自动完成

Protected $_auto = array(

Array(‘create_time’,’time’,1,’function’),

);

}

主要用于表单的自动验证和自动完成。

如果使用D函数实例化模型类,一般需要对应一个数据模型类,而且create方法会自动把表单提交的数据进行自动验证和完成(如果有定义的话)。

如果验证成功,就表示数据对象已经成功创建,但目前只是保存在内存中,直到我们调用add方法写入数据到数据库。这样就完成了一个完整的Create操作,所以可以看到ThinkPHP在创建数据的过程中使用了两步:

第一步,create方法创建数据对象,

第二步,使用add方法把当前的数据对象写入数据库

当然可以完全跨越第一步,直接进行第二步,但是这样的预处理有几个优势:

1、无论表单有多复杂,create方法都可以用一行代码轻松创建数据对象,

2、在写入数据之前,可以对数据进行验证和补充;

目的:确保写入数据库的数据安全和有效。

效果:验证完毕不输入标题就直接提交表单的话,系统会给出标题必须这样的提示信息。

如果你的数据完全是内部操作写入而不是通过表单的话(也就是说可以充分信任数据的安全),那么可以直接使用add方法,如:

$Form = D(‘Form’);

$data[‘title’] = ‘ThinkPHP’;

$data[‘content’] = ‘表单内容’;

$Form->add($data);

也可以支持对象方式操作:

$Form = D(‘Form’);

$Form -> title = “ThinkPHP”;

$Form -> content = “表单内容”;

$Form -> add();

对象方式操作的时候,add方法无需传入数据,会自动识别当前的数据对象赋值。

三、读取数据

我们可以通过find方法获取一个单一数据,定义read操作方法如下:

Public function read($id=0){

$Form = M(‘Form’);

//读取数据

$data = $Form -> find($id);

If($data){

$this->data = $data;//模板变量赋值

}else{

$this->error(‘数据错误’);

}

$this->display();

}

read操作方法有一个参数$id,表示我们可以接受URL里面的id变量(

这里用M方法而没有用D方法,是因为find方法是基础模型类Model中的方法,

所以没有必要浪费开销去实例化FormModel类(即使已经定义了FormModel类)。

我们通常采用find方法读取某个数据,这里使用了AR模式来操作,所以没有传入查询条件,

Find($id)表示读取主键为$id值的数据,find方法的返回值是一个如下格式的数组:

Array(

‘id’      =>   5,

‘title’     =>  ‘测试标题’,

‘content’  =>  ‘测试内容 ’,

‘status’   =>  1,

然后我们可以在模板中输出数据,添加一个read模板文件,

<table>

<tr>

<td>id;</td>

<td>{$data.title}</td>

</tr>

<tr>

<td>标题:</td>

<td>{$data.title}</td>

</tr>

<tr>

<td>内容:</td>

<td>{$data.content}</td>

</tr>

</table>

访问路径:http://localhost/app/index.php/Form/read/id/1

查询某个字段可以使用getField方法:

$Form = M(Form);

//获取标题

$title = $Form -> where(‘id=3’)->getField(‘title’);

四、更新数据

对数据进行更新,添加一个编辑表单的模板文件edit.html,如下:

<FORM method=”post” action=”_URL_/update”>

标题:<input type=”text” name=”title” value=”{$vo.title}”><br/>

内容:<textarea  name=”content” rows=”5” cols=”45”>{$vo,content}}</textarea>

<br/>

<input type=”hidden” name=”id” value=”{$vo.id}”>

<input type=”submit” value=”提交”>

</FORM>

因是更新数据所以只对模板进行变量赋值,所以,我们这次需要在FormAction类添加两个操作方法:

Public function edit($id=0){

$Form = M(‘Form’);

$this -> vo = $Form -> find($id);

$this -> display();

}

Public function update(){

$Form = D(‘Form’);

If($Form->create()){

$result = $Form->save();

If($result){

$this -> success(‘操作成功!’);

}else{

$this -> error(‘写入错误!’);

}

}else{

$this->error($Form->getError());

}

}

数据的更新操作在ThinkPHP使用save方法进行保存更新数据,

Create方法创建表单提交数据。

更新条件其实就是表的主键,这就是我们在编辑页面要把主键的值作为隐藏字段一起提交的原因。

不依赖表单提交的更新操作

$Form = M(“Form”);

// 要修改的数据对象属性赋值

$data[‘id’] = 5;

$data[‘title’] = “ThinkPHP”;

$data[‘content’] = ‘ThinkPHP3.1版本发布’;

$Form -> save($data); //根据条件保存修改的数据

Save方法会自动识别数据对象中的主健字段,并作为更新条件。

显示传入更新条件:

$Form = M(“Form”);

//要修改的数据对象属性赋值

$data[‘title’] = ‘ThinkPHP’;

$data[‘content’] = ‘ThinkPHP3.1版本发布’;

$Form -> where(‘id=5’)->save($data); //根据条件保存修改的数据

可以改成对象方式来操作:

$Form = M(“Form”);

//要修改的数据对象属性赋值

$Form->title = ’ThinkPHP’;

$Form->content = “ThinkPHP3.1版本发布”;

$Form->where(‘id=5’)->save();//根据条件保存修改的数据

数据对象赋值的方式,save方法无需传入数据,会自动识别。

Save方法的返回值是影响的记录数,如果返回false则表示更新出错。

有些时候,我们只需要修改某个字段的值,就可以使用setField方法,而不需要每次都调用save方法。

$Form = M(“Form”);

//更改title值

$Form -> where(‘id=5’) -> setField(‘title’,’ThinkPHP’);

对于统计字段,系统还提供了更加方便的setInc和setDec方法。

例如:

$user = M(“user”);  //实例化User对象

$User -> where(‘id=5’)->setInc(‘score’,3); //用户的积分加3

$User ->where(‘id=5’)->setInc(‘score’); //用户的积分加1

$User->where(‘id=5’)->setDec(‘score’,5); //用户的积分减5

$User->where(‘id=5’)->setDec(‘score’); //用户的积分减1

五、删除数据

删除数据很简单,只需要调用delete方法,例如:

$Form=M(‘Form’);

$Form -> delete(5);

表示删除主键为5的数据,delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件,例如:

$User = M(“User”); //实例化User对象

$User -> where(‘id=5’)->delete(); //删除id为5的用户数据

$User -> delete(‘1,2,5’); //删除主键为1,2和5的用户数据

$User -> where(‘status=0’)->delete(); //删除所有状态为0的用户数据

Delete方法的返回值是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。

六、总结

Create方法:创建数据

Add方法: 添加数据

Save方法:   保存数据

Delete方法:删除数据

getField方法:获取单个信息字段

setField方法:设置单个信息字段

转载于:https://www.cnblogs.com/john-sr/p/6009691.html

ThinkPHP3快速入门教程二:数据CURD相关推荐

  1. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

  2. sklearn快速入门教程:(二)线性回归

    文章目录 一.从本文起学会快速阅读和学习 二.线性回归的原理回顾及官方文档 三.官方文档的分析 四.举一反三 五.小结 一.从本文起学会快速阅读和学习 本来是想把关于快速阅读的说明写在前一节,但最后还 ...

  3. 新手必备pr 2021快速入门教程「十二」PR导出高清视频

    PR2021快速入门教程,学完之后,制作抖音视频,vlog,电影混剪,日常记录等不在话下!零基础,欢迎入坑! 本节内容 视频剪辑成我们想要的样子后,接下来重要的一步,就是导出!但是"如何导出 ...

  4. ecshop二次开发的简单快速入门教程

    ecshop二次开发的简单快速入门教程,具体请下载文档 ecshop_dwt_lbi_详解.rar (106 KB) 下载次数: 9 转载于:https://my.oschina.net/u/3360 ...

  5. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

  6. sklearn快速入门教程:(四)模型自动调参

    上个教程中我们已经看到在sklearn中调用机器学习模型其实非常简单.但要获得较好的预测效果则需要选取合适的超参数.在实际的项目中其实也有不少参数是由工程师借助其经验手动调整的,但在许多场景下这种方式 ...

  7. sklearn快速入门教程:(三)机器学习的通用模式及实现方法

    一.从线性回归总结机器学习的通用模式 从上篇博客我们详细讲述了线性回归的实现方式.线性回归的调用方式实际上是sklearn的典型方式,在掌握这个方法之后我们继续进一步深入,探索其它的模型的使用. 回顾 ...

  8. sklearn快速入门教程:(一)准备工作

    sklearn快速入门教程 – 准备工作 1. 前言 sklearn全称 scikit-learn,它是一个集成了目前市面上最常用的机器学习模型的库,使用起来非常轻松简单,因此获得了广泛的应用. 从官 ...

  9. php yii2 api框架,Yii2框架制作RESTful风格的API快速入门教程

    先给大家说下什么是REST restful REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Ro ...

最新文章

  1. python画柱形图-python绘制双柱形图代码实例
  2. 已知三角形三边长怎么求面积_解三角形问题中的常见错解分析
  3. win10远程控制centos7.0开机
  4. 原SUN网站:java.sun.com,developers.sun.com,bigadmin将合并到OTN
  5. Linux应用集成MySQL数据库访问技巧
  6. 希尔排序--Java
  7. mysql cst_一次 JDBC 与 MySQL 因 “CST” 时区协商误解导致时间差了 14 或 13 小时的排错经历...
  8. android中dip、dp、px、sp和屏幕密度
  9. org.apache.maven.plugins:maven-resources-plugin:2.4.3
  10. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
  11. 沙湖王 | 用Scipy实现K-means聚类算法
  12. 阿里云服务器如何更换系统镜像
  13. 2018前端面试题总结
  14. 百度同步盘无法登陆,报错155010,对策
  15. 台服海岛纪元显示无法连接服务器,打开海岛纪元提示网络异常或者连接不上
  16. 航模的无刷电机到底是什么电机
  17. SVN冲突的原因和解决
  18. flutter 中Sliver一些想法
  19. 计算机专业要求屏幕吗,台式电脑需要剪辑的话,显示屏是选择曲屏好还是直屏好呢?...
  20. 成都中忻嘉业:提高抖音短视频播放量的三个小技巧

热门文章

  1. MongoDB高级查询详细
  2. CentOs 设置静态IP 方法[测试没问题]
  3. 【你必须知道的.NET】:【大话String】
  4. Java中J.U.C扩展组件之Fork,join
  5. 【bootloader】bootloader启动过程分析
  6. Android自动化测试之使用java调用monkeyrunner(补充篇)
  7. 如果一个国家是一种颜色,中国的颜色美哭了!
  8. hive学习2(Navicat连接hive)
  9. 【Daily Scrum】
  10. UVa 11636 - Hello World!