在Thinkphp编程中集成了很多用起来非常方便的方法。对于刚接触的编程人员来说,可谓是只要掌握并灵活运用了,那么就可以达到事半功倍的效果了,下面就来为大家详细的讲解一下。
1. getField
getField的方便之处在于可以获取一个值,一个数组,或者一组键值对。
接下来举三个例子简单说明。
A. 获取一个值。
在修改密码的方法中,要验证旧密码是否匹配。现已知用户id为$uid。
则$old_pass = $Model->where(“uid=’$uid’”)->getField(‘password’);
即可获取旧密码来进行验证。
B. 获取一个数组
如果一级分类下有二级分类,现在给出一级分类,要求搜索到一级分类下的所有产品。
解决方法就是首先获得所有的二级分类ID,这时候用getField是非常方便的。
$arr_types = $Model->where(“pid=’$type_id’”)->getField(‘id’,true);
$map[‘type_id’] = array(‘in’,$arr_types);
$products = M(‘product’)->where($map)->select();
这样就获取到了这个一级分类下的所有产品,该方法仅限二级分类,如果有三级分类请用其他方法解决。
C. 获取一组键值对
鉴于水平有限,目前主要用于关联查询的信息展示中,可以在一定程度上给数据库减压。
比如要展示一个用户的购物车,然而从购物车表中仅仅能查到商品的ID,但我想要展示商品的名字。这时候从商品表中获取一组键值对即可解决这个问题。
$arr_product = $Model->getField(‘id,product_name’,true);
输出的时候,对应商品的名字为$arr_product[$product_id];
当然,用join也能解决这个问题。
2. page
顾名思义,这是thinkphp封装好的一个分页类,用起来非常方便。不同版本用法不同,详细用法可以查看手册。这里要讲的是一个终极解决方案。无论哪个版本,甚至是原生的php都可以解决分页问题。
假设要分页的结果是$product_list(数据类型array)。
当前页码:$page = I(‘page’)?I(‘page’):1;
每页信息条数:$per_page = 10;
获得分页结果:$product_list = array_slice($product_list,($page-1)* $per_page, $per_page);
Array_slice参数:数组名,起始位置(0开始),分割的数量。
3. setField
有时候需要改变一组数据中或一类数据中的某个字段,这时候用save方法有点大材小用。
比如我只需要修改一个状态值,将某个或某类的status值修改为1,表示可用。
$Model->where($map)->setField(‘status’,1);
如果同时我想把修改时间也记录下来怎么办。
$data[‘status’] = 1;
$data[‘edittime’] = time();
$Model->where($map)->setField($data);
setField可以修改一个字段,也可以修改多个字段。
4. setInc、setdec
SetInc,常用来统计阅读量点击量。每次请求文章的时候,只需要:
$Model->where(“id=’$id’”)->setInc(‘readnum’);
默认增加1,也可以自定义。详细用法可以看手册。
Setdec用法一样。
5. 后台有关于添加、编辑一类控制器的技巧
做后台开发的都知道,添加一条数据需要用两个控制器,一个用来展示页面,另一个用来操作,其实两个控制器可以合二为一的。现在已添加为例:
常规写法:
Public function addproduct(){
$this->display();
}
Public function do_addproduct(){
$Model = M(‘product’);
$data = array(
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
);
$result = $Model->add($data);
If($result){
Success(‘添加成功’,U(‘product_list’));
}else{
Error(‘添加失败’);
}
}
合二为一的写法:
Public function addproduct(){
If(IS_POST){
$Model = M(‘product’);
$data = array(
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
);
$result = $Model->add($data);
If($result){
Success(‘添加成功’,U(‘product_list’));
}else{
Error(‘添加失败’);
}
}else{
$this->display();
}
}
以上是添加一类的控制器的写法,接下来同样的思路,展示修改控制器的写法。
Public function editproduct(){
$id = I(‘id’);
$Model = M(‘product’);
If(IS_POST){
$data = array(
‘id’ => $id,
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
‘addtime’=>time()
);
$result = $Model->save(‘data’);
If($result){
Success(‘修改成功’,U(‘product_list’));
}else{
Error(‘添加失败’,U(‘editproduct’,array(‘id’=>$id)));
}
}else{
$this->info = $Model->find($id);
$this->display();
}
}
最后需要跟各位编程人员讲解一些注意事项:
a.展示页面的时候,id以input[hidden]形式展示,提交的时候一并提交上去,写起来会轻松很多。
b.如果在$data数组中有主键存在,直接save方法即可。
c.为了避免没有任何修改导致返回结果失败的情况,加上时间即可解决。
合二为一的方法,最大的好处就是在模板中写
表单的时候,action=”/Admin/Technology/edit/id/507.html”即可,十分方便。好了到这里就为大家讲完了,如果还是存在不理解的地方,那么大家可以咨询来寻求帮助。
本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!
原文地址:http://blog.51cto.com/13686158/2160849