当我们成功写入数据后,就可以进行数据读取操作了。在前面一篇中,我们已经知道可以用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>
完成后,我们就可以访问
来查看了。
如果你只需要查询某个字段的值,还可以使用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" value="{$vo.title}"><br/> 内容:<TEXTAREA rows="5" cols="45">{$vo.content}</TEXTAREA><br/> <INPUT type="hidden" 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方法创建表单提交的数据,而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); // 根据条件保存修改的数据
也可以改成对象方式来操作: