ThinkPHP框架使用心得二 CURD操作
写这篇随笔之前,我明显陷入了一个令我几乎放弃的想法:手册上讲的非常详细,网上的例子讲解多的一塌糊涂,我凭借并不精熟的技能经验写这个东西,贻笑大方是一,有什么用处是二。这个想法在我的脑海里不断的闪现,以至于我的例子其实写好很久,但是迟迟没有动手写博文。终于,今天上班路上,不断纠结的我想明白一件事:我写的所有的东西并不是去指导别人怎么样,更不是为了展示我的技术怎么样。我在博客园开博最重要的是让自己得到历练,让自己有坚持完成一个完整的,比较漂亮的个人项目。获取,它的设计很丑陋,或许,它的逻辑很简单。但是,一步步敲击起来的过程才是我想要的东西。我需要坚持。
CURD分别是create,update,read,delete的缩写,对数据的CURD是php的最基本的操作。tp封装了很好的curd操作方法。下面,我将展示我的user模块的相关curd操作。 至于之前说的rbac权限控制还需要过段时间。
首先,建立用户表的数据结构:
然后,在tp的Conf目录下定义相关的数据库配置项,可以从ThinkPHP的核心包下的Common/convention.php下找到相关配置项,然后根据自己的实际情况加以修改。之前说过,我用的是sea版本的tp核心包,数据库的配置sea已经定义好,不许额外配置。
然后,在项目目录下的lib/Action/下建立相关的action:此处建立UserAction.class.php。在这个文件下分别定义一下方法。
1 class UserAction extends Action{
3 public function index(){}
4 //新增记录 create
5 public function add(){}
6 //编辑记录 update
7 public function edit(){}
8 //删除记录 delete
9 public function delete(){}
10 }
上面分别定义了curd对应的操作。下面,具体实现着四个方法。
首先,create操作。
2if(!checkLogin())
3 die("<script>alert('尚未登录,请登录');window.location.href='?m=user&a=login'</script>");
4 if($_POST['submit']){
5 $user = M('User');
6 if($user->create()){
7 $res = $user->add();
8 if($res)
9 echo "<script>alert('插入成功');</script>";
10 else
11 echo "<script>alert('插入失败');</script>";
12 }else{
13 echo $user->getError();
14 }
15 }
16 $this->display();
17 }
ThinkPHP提供了一个自动填充方法,create方法,通过使用这个方法,tp可以自动将表单提交的数据中与数据表中字段名相匹配的数据自动填充中实例化的对象中然后使用tp提供的add方法插入数据库中。$user = M('User')是对模型的快速实例化,用M方法可以不用预先定义model,与$model = new Model();一个意思。至于create方法可以使用$user->username = $_POST['username']这样的形式来进行填充。不过,create方法除了填充外还会自动验证表单数据,可以极大提高效率。这部分以后会涉及。
然后,UPDATE方法
2 if(!checkLogin())
3 die("<script>alert('尚未登录,请登录');window.location.href='?m=user&a=login'</script>");
4 $user = D('User');
5 $id = $_GET['id'];
6 if($id){
7 $userinfo = $user->select($id);
8 }
9 if(isset($_POST['submit']) && !empty($_POST['submit'])){
10 if($user->create()){
11 $user->where("userid = $id")->save();
12 }else{
13 echo $user->getError();
14 }
15 }
16 $this->model = $userinfo[0];
17 $this->display();
18 }
这个方法与add方法相似,不过,预先会传入相关参数先通过select方法选出对应数据展示在view层,后面跟add原理相同
然后,READ操作
1 public function index() { //用户列表
3 die("<script>alert('尚未登录,请登录');window.location.href='?m=user&a=login'</script>");
4 $user = D('User');
5 $fields = array('userid', 'username', 'nickname', 'password');
6 $map['active'] = array('eq', 1);
7 $userinfo = $user->field($fields)->where($map)->select();
8 $this->userinfo = $userinfo;
9 $this->display();
10 }
这个方法里使用了select方法,查询应该是php与数据库交互中用的最多的。tp的curd操作往往跟连贯操作相关联使用。常用的连贯操纵有where,table,field,data,order,limit,page,group,having,join,district,lock等,使用这些方法的实质就是凭借sql语句。
最后,DELETE操作。
1 public function del() { //用户删除
3 die("<script>alert('尚未登录,请登录');window.location.href='?m=user&a=login'</script>");
4 $user = D('User');
5 $id = $_GET['id'];
6 if($id){
7 $user->delete($id);
8 echo "<script>alert('删除成功');window.location.href='?m=User'</script>";
9 }
10 }
删除操作就是把参数传递过来然后执行delete操作。跟原生的php一样,删除操作时数据库操作中需要极其谨慎的。
先简要的描述一下curd的相关操作,这部分是tp来自php的基础,还是在实际使用的时候才看得出他们的意义。