这里用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>
访问路径: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的用户数据