您好,欢迎访问一九零五行业门户网

ThinkPHP3.1数据CURD操作快速入门

这篇文章主要介绍了thinkphp3.1的curd操作,需要的朋友可以参考下
1.curd概述:
curd是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是curd。它代表创建(create)、更新(update)、读取(read)和删除(delete)操作。curd 定义了用于处理数据的基本原子操作。之所以将curd提升到一个技术难题的高度是因为完成一个涉及在多个数据库系统中进行curd操作的汇总相关的活动,其性能可能会随数据关系的变化而有非常大的差异。
curd在具体的应用中并非一定使用create、update、read和delete字样的方法,但是他们完成的功能是一致的。例如,thinkphp就是使用add、save、select和delete方法表示模型的curd操作。
2.创建数据
大多数情况下,curd的create操作通常会通过表单来提交数据,首先,我们在项目的tpl/form目录下面创建一个add.html 模板文件,内容为:
标题:
内容:
然后,我们还需要在项目的action目录下面创建一个formaction.class.php文件,暂时只需要定义formaction类,不需要添加任何操作方法,代码如下:
class formaction extends action{ }
接下来,访问:
就可以看到表单页面了,,我们并没有在控制器里面定义add操作方法,但是很显然,访问是正常的。因为thinkphp在没有找到对应操作方法的情况下,会检查是否存在对应的模板文件,由于我们有对应的add模板文件,所以控制器就直接渲染该模板文件输出了。所以说对于没有任何实际逻辑的操作方法,我们只需要直接定义对应的模板文件就行了。
我们可以看到,在表单中定义了提交地址是到form模块的insert操作,为了处理表单提交数据,我们需要在formaction类中添加insert操作方法,如下:
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则表示写入出错。
3.模型
为了方便测试,我们首先在数据库中创建一个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 ;
我们在insert操作方法中用了d函数,和m函数不同,d函数需要有对应的模型类,下面我们就来创建模型类。模型类的定义规范是:
模型名+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方法会自动把表单提交的数据进行自动验证和自动完成(如果有定义的话),如果自动验证失败,就可以通过模型的geterror方法获取验证提示信息,如果验证通过,就表示数据对象已经成功创建,但目前只是保存在内存中,直到我们调用add方法写入数据到数据库。这样就完成了一个完整的create操作,所以可以看到thinkphp在创建数据的过程中使用了两步:
第一步,create方法创建数据对象,
第二步,使用add方法把当前的数据对象写入数据库。
当然,你完全可以跨过第一步,直接进行第二步,但是这样的预处理有几个优势:
1、无论表单有多复杂,create方法都可以用一行代码轻松创建数据对象;
2、在写入数据之前,可以对数据进行验证和补充;
其实create方法还有很多的功能操作,目的只有一个,确保写入数据库的数据安全和有效。
我们来验证下表单提交的效果,当我们不输入标题就直接提交表单的话,系统会给出标题必须这样的提示信息。
当我们顺利提交表单后,会看到写入数据表的数据中的create_time字段已经有值了,这就是通过模型的自动完成写入的。
如果你的数据完全是内部操作写入而不是通过表单的话(也就是说可以充分信任数据的安全),那么可以直接使用add方法,如:
$form = d('form');$data['title'] = 'thinkphp';$data['content'] = '表单内容';$form->add($data);
也可以支持对象方式操作:
$form = d('form');$form->title = 'thinkphp';$form->content = '表单内容';$form->add();
对象方式操作的时候,add方法无需传入数据,会自动识别当前的数据对象赋值。
4.读取数据
当我们成功写入数据后,就可以进行数据读取操作了。在前面一篇中,我们已经知道可以用select方法获取数据集,这里我们来通过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模板文件:
其它类似信息

推荐信息