日期:2011-09-28  浏览次数:20434 次

上一篇中,我们了解了ThinkPHP的基础部分,以及如何创建一个控制器和模板,并知道了M方法的用法,本篇将会讲解下数据的CURD操作,探索下更多的数据操作。

CURD

CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD。它代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。CURD 定义了用于处理数据的基本原子操作。之所以将CURD 提升到一个技术难题的高度是因为完成一个涉及在多个数据库系统中进行CURD操作的汇总相关的活动,其性能可能会随数据关系的变化而有非常大的差异。
CURD在具体的应用中并非一定使用create、update 、read和delete字样的方法,但是他们完成的功能是一致的。例如,ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。

创建数据

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

  1.   <FORM method="post" action="__URL__/insert">
  2.     标题:<INPUT type="text" name="title"><br/>
  3.     内容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/>
  4.     <INPUT type="submit" value="提交">
  5.   </FORM>

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

  1. class FormAction extends Action{
  2. }

接下来,访问

  1. http://localhost/app/index.php/Form/add

就可以看到表单页面了,我们并没有在控制器里面定义add操作方法,但是很显然,访问是正常的。因为ThinkPHP在没有找到对应操作方法的情况下,会检查是否存在对应的模板文件,由于我们有对应的add模板文件,所以控制器就直接渲染该模板文件输出了。所以说对于没有任何实际逻辑的操作方法,我们只需要直接定义对应的模板文件就行了。
我们可以看到,在表单中定义了提交地址是到Form模块的insert操作,为了处理表单提交数据,我们需要在FormAction类中添加insert操作方法,如下:

  1. class FormAction extends Action{
  2.     public function insert(){
  3.         $Form   =   D('Form');
  4.         if($Form->create()) {
  5.             $result =   $Form->add();
  6.             if($result) {
  7.                 $this->success('操作成功!');
  8.             }else{
  9.                 $this->error('写入错误!');
  10.             }
  11.         }else{
  12.             $this->error($Form->getError());
  13.         }
  14.     }
  15. }

如果你的主键是自增类型的话,add方法的返回值就是该主键的值。不是自增主键的话,返回值表示插入数据的个数。如果返回false则表示写入出错。

 

模型

为了方便测试,我们首先在数据库中创建一个think_form表:

  1. CREATE TABLE IF NOT EXISTS `think_form` (
  2.   `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(255) NOT NULL,
  4.   `content` varchar(255) NOT NULL,
  5.   `create_time` int(11) unsigned NOT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

我们在insert操作方法中用了D函数,和M函数不同,D函数需要有对应的模型类,下面我们就来创建模型类。模型类的定义规范是:模型名+Model.class.php (模型名的定义采用驼峰法并且首字母大写)
我们在项目的Lib/Model 目录下面创建FormModel.class.php文件,添加代码如下:

  1. class FormModel extends Model {
  2.     // 定义自动验证
  3. &nb