• 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 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 的内容 

  • 相关阅读:
    treeview十八般武艺,js选择和绑定权限树
    开源WebOS
    公交车路线查询系统后台数据库设计
    网页信息抓取
    一步一步打造WebIM(3)——性能测试
    WebBrowser介绍——Javascript与C++互操作
    .NET文档生成工具ADB[更新至2.3]
    一步一步打造WebIM(4)——Comet的特殊之处
    在SQL Server中对视图进行增删改
    开源企业即时通讯和在线客服
  • 原文地址:https://www.cnblogs.com/jacson/p/4495069.html
Copyright © 2020-2023  润新知