一、数据读取
在之前的课程中,我们已经大量使用了数据读取的功能,比如 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 HomeModel; 3 use ThinkModel; 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 的内容