1.CURD の概要:
CURDとはデータベーステクノロジーの略称で、一般的なプロジェクト開発における各種パラメータの基本的な機能を指します。これは、作成、更新、読み取り、および削除の操作を表します。 CURD は、データを処理するための基本的なアトミック操作を定義します。 CURD が技術的に難しいレベルにまで引き上げられている理由は、複数のデータベース システムで CURD 操作を含む集計関連アクティビティを完了するパフォーマンスが、データ関係の変化に応じて大きく異なる可能性があるためです。
CURD は、特定のアプリケーションで作成、更新、読み取り、および削除メソッドを必ずしも使用するわけではありませんが、それらが実行する機能は同じです。たとえば、ThinkPHP は、add、save、select、および delete メソッドを使用して、モデルの CURD 操作を表します。
2. データを作成します
ほとんどの場合、CURD の Create 操作は通常、フォームを通じてデータを送信します。まず、次の内容の add.html テンプレート ファイルをプロジェクトの Tpl/Form ディレクトリに作成します。
リーリーリーリー
リーリー
フォームで定義された送信アドレスが Form モジュールへの挿入操作であることがわかります。フォーム送信データを処理するには、次のように FormAction クラスに挿入操作メソッドを追加する必要があります。
リーリー
テストを容易にするために、まずデータベースに think_form テーブルを作成します。
リーリー
プロジェクトの Lib/Model ディレクトリに FormModel.class.php ファイルを作成し、次のコードを追加します。
リーリー
2 番目のステップでは、add メソッドを使用して、現在のデータ オブジェクトをデータベースに書き込みます。
もちろん、最初のステップをスキップして 2 番目のステップに直接進むこともできますが、この種の前処理にはいくつかの利点があります:
実際、create メソッドには多くの機能操作があり、目的は 1 つだけです。それは、データベースに書き込まれるデータが安全かつ有効であることを確認することです。
タイトルを入力せずにフォームを直接送信すると、システムはタイトルは次のようにする必要があるというプロンプトメッセージを表示します。
フォームが正常に送信されると、データ テーブルに書き込まれたデータの create_time フィールドにすでに値が設定されていることがわかります。これは、モデルの自動補完によって書き込まれています。
リーリー
オブジェクトモード操作もサポートできます:
对象方式操作的时候,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模板文件:
<table> <tr> <td>id:</td> <td>{$data.id}</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');
上面的用法表示获取id值为3的数据的title字段值。其实getField方法有很多用法,但是获取某个字段的值是getField方法最常规的用法。
查询操作是最常用的操作,尤其是涉及到复杂的查询条件,我们会在查询语言一章对查询进行更加详细的讲解。
5.更新数据
在成功写入并读取数据之后,我们就可以对数据进行编辑操作了,首先我们添加一个编辑表单的模板文件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()); } }
完成后,我们就可以访问
http://localhost/app/index.php/Form/edit/id/1
数据的更新操作在ThinkPHP使用save方法,可以看到,我们同样可以使用create方法创建表单提交的数据,而save方法则会自动把当前的数据对象更新到数据库,而更新的条件其实就是表的主键,这就是我们在编辑页面要把主键的值作为隐藏字段一起提交的原因。
如果更新操作不依赖表单的提交的话,就可以写成:
$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
6.删除数据
删除数据很简单,只需要调用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表示没有删除任何数据。