CURD 操作 [2]

一、数据读取

在之前的课程中,我们已经大量使用了数据读取的功能,比如 select()方法。结合各
种连贯方法可以实现数据读取的不同要求,支持连贯的方法有:

1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;

5.order,结果排序;
6.group,查询分组;
7.having,分组再查询;
8.join,多表链接查询;
9.union,合并 SELECT;
10.distinct,取唯一值;


11.lock,锁;
12.cache,缓存;
13.relation,关联查询;
14.result,数据转换;
15.scope,命名范围;
16.bind,数据绑定操作;
17.comment,SQL 注释。

 

显示默认第一条数据

1 1 $user = M('User');
2 2 var_dump($user->find());  //可以传递数字参数,AR 模式

这时find()里面加哪一个数字,就会var_dump()出哪一条数据;(其实是找主键等于某个数值,如果主键不是数值或者

主键中该数值不存在的话,则没有数据)

 

显示默认所有数据

1 $user = M('User');
2 var_dump($user->select()); 

此时,select()括号内加上数字,也是只获取id为该数字的数据

 

获取第一条user字段的值

1 $user = M('User');
2 var_dump($user->getField('user'));

 

获取所有user字段的值

1 $user = M('User');
2 var_dump($user->getField('user', true));

 

传递多个字段,获取所有

1 $user = M('User');
2 var_dump($user->getField('user,email'));

 

id冒号分隔

1 $user = M('User');
2 var_dump($user->getField('id,user,email',':'));

获得结果如图:

id与后面的数据之间隔了:符号;

 

限制2条数据

 

1 $user = M('User');
2 var_dump($user->getField('id,user,email',2));

 

 

 

二、数据更新

数据更新使用的方法是 save()方法,主要是对数据的修改操作。

 修改第一条数据

1 $user = M('User');
2 $data['user'] = '蜡笔大新';
3 $data['email'] = 'daxin@qq.com';
4 $map['id'] = 1;
5 $user->where($map)->save($data); //成功后返回 1,否则 0

如果数据成功存入数据库,这时用 echo $user->where($map)->save($data); 则会返回1,否则返回0;

 

默认主键为条件

1 $user = M('User');
2 $data['id'] = 1;
3 $data['user'] = '蜡笔小新';
4 $data['email'] = 'xiaoxin@163.com';
5 $user->save($data);

这时,会自动识别数据库的主键,主键设置的为id,则,这时更新主键为1的内容;

 

数据更新的 save()方法支持的连贯方法有:


1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;
5.order,结果排序;


6.lock,锁;
7.relation,关联查询;
8.scope,命名范围;
9.bind,数据绑定操作;
10.comment,SQL 注释。

 

 结合create()

这时,在首先在主目录下index.html(与index.php同级),插入以下代码

 

1 <meta charset="utf-8">
2 <form method="post" action="http://localhost/demo39/index.php/Home/User/save">
3   <p><input type='hidden' name='id' value='1' /></p>    
4   <p>用户:<input type="text" name="user" /></p>
5   <p>邮箱:<input type="text" name="email" /></p>
6   <input type="submit" value="提交">
7 </form>

 

在  Home/controller/UserController.class.php  下插入以下代码:

1 $user = M('User');
2 $user->create(); 
3 $user->save();

解释一下在index.html内插入 <p><input type='hidden' name='id' value='1' /></p>  的意思

因为 Home/controller/UserController.class.php  使用的是 $user->create();  ,也就是所有

index.html里POST上来的内容的都在create()里,如果这里没有主键的话,那么数据就无法更新数据库了。

 

 

 修改某一个值

1 $map['id']=1;
2 $data['user']=$_POST['user'];
3 $user->where($map)->setField('user',$data['user']);

这时,是将POST过来的一条数据插入数据库,其实也可以把id放在html中,这样,post上来的数据就可以直接存储了

 

 统计累计,累加累减

1 $user = M('User');
2 $map['id'] = 1;
3 $user->where($map)->setInc('count',1); //累加,setDec 累减

这时我们在数据库新建一个名字叫count,如下图:

这时我们使用setInc函数后,count可以每次自动加一,count后面的数字是可以随便改的,(想到,这样其实可以在应用中设定,

当用户每次登录时,或者改变数据时,使conut加上某个数值的。就相当于是积分了)

 

 

三、数据删除

数据删除使用的方法是 delete()方法

 

直接删除主键(id=17)

1 $user = M('User');
2 $user->delete(17);

 

根据ID来删除

1 $user = M('User');
2 $map['id'] = 16;
3 $user->where($map)->delete();

 

批量删除多个

1 $user = M('User');
2 $user->delete('1,3,5');

 

删除count为0且按时间倒序的前五个

1 $user = M('User');
2 $map['count'] = 0;
3 $user->where($map)->order(array('date'=>'DESC'))->limit(5)->delete();

 

删除所有数据,谨慎

1 $user = M('User');
2 $user->where('1')->delete();

这时如果  echo $user->where('1')->delete(); 则echo出的是删除数据的条数;where()括号里面只要是个数值就可以,不一定就是1;

 

delete()方法支持的连贯操作有:


1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.order,结果排序;
5.lock,锁;


6.relation,关联查询;
7.scope,命名范围;
8.bind,数据绑定操作;
9.comment,SQL 注释。



四、ActiveReocrd 模式

这种模式最大的特别就是简化了 CURD 的操作,并且采用对象化的操作方式,便于使用
和理解。

 

添加一条数据

1 $user = M('User');
2 $user->user = '火影忍者';
3 $user->email = 'huoyin@qq.com';
4 $user->date = date('Y-m-d H:i:s');
5 $user->add();

 

结合create

1 $user = M('User');
2 $user->create();
3 $user->date = date('Y-m-d H:i:s');
4 $user->add();

 

找到主键为4的值

1 $user = M('User');
2 var_dump($user->find(4));

 

查找user=蜡笔小新的记录

1 $user = M('User');
2 var_dump($user->getByUser('蜡笔小新'));

 

输出user

1 echo $user->user;

 

通过主键查询多个

1 $user = M('User');
2 var_dump($user->select('1,2,3'));

 

修改一条数据

1 $user = M('User');
2 $user->find(1);
3 $user->user = '蜡笔老新';
4 $user->save();

 

 

修改一条数据

1 $user = M('User');
2 $user->find(1);
3 $user->user = '蜡笔老新';
4 $user->save();

 

删除当前找到的数据

1 $user = M('User');
2 $user->find(11);
3 $user->delete();

 

删除主键为10的数据

1 $user = M('User');
2 $user->delete(10);

 

删除主键为10,11的数据

1 $user = M('User');
2 $user->delete('10,11');

注意delete()括号里的数字一定要加上单引号,如果不加单引号,则删除的时候只会删除前一个数字,而不是两个都删

 

五、字段映射

 

字段映射可以将表单里的 name 名称对应到数据表里的字段,这样防止系统自动屏蔽掉
不对应的 POST 值。

在index.html内的代码如下:

1 <meta charset="utf-8">
2 <form method="post" action="http://localhost/demo39/index.php/Home/User/save">
3   <p>用户:<input type="text" name="yonghu" /></p>
4   <p>邮箱:<input type="text" name="youxiang" /></p>
5   <input type="submit" value="提交">
6 </form>

注意三个地方,一是action提交的地方是 User/save ,而是用户和邮箱的name不是user和email了

这时,在 Home/Model/UserModel.class.php 内的代码如下:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 
 5 class UserModel extends Model {
 6     protected $_map = array(
 7         'yonghu'=>'user',  //这里是逗号
 8         'youxiang'=>'email',
 9         );  //这里要加分号
10 }

即把index.html中的name对应到数据表的名字,注意$_map后面的分号,这样在 Home/controller/UserController.class.php 便可直接使用以下代码:

1 public function save() {
2             $user = D('User');
3             $data=$user->create();
4             $map['id']='1';
5             $user->where($map)->save($data);
6 }

这时,即可更新id为1 的内容 

posted @ 2015-05-11 17:15  todaytoday  阅读(213)  评论(0编辑  收藏  举报