一、数据读取

在之前的课程中,我们已经大量使用了数据读取的功能,比如 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 $user = M('User');
2 var_dump($user->find()); //可以传递数字参数,AR 模式

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

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

显示默认所有数据

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

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

获取第一条user字段的值

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

获取所有user字段的值

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

传递多个字段,获取所有

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

id冒号分隔

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

获得结果如图:

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

限制2条数据

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

二、数据更新

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

修改第一条数据

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

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

默认主键为条件

 $user = M('User');
$data['id'] = 1;
$data['user'] = '蜡笔小新';
$data['email'] = 'xiaoxin@163.com';
$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同级),插入以下代码

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

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

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

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

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

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

修改某一个值

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

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

统计累计,累加累减

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

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

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

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

三、数据删除

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

直接删除主键(id=17)

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

根据ID来删除

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

批量删除多个

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

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

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

删除所有数据,谨慎

 $user = M('User');
$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 的操作,并且采用对象化的操作方式,便于使用
和理解。

添加一条数据

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

结合create

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

找到主键为4的值

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

查找user=蜡笔小新的记录

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

输出user

 echo $user->user;

通过主键查询多个

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

修改一条数据

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

修改一条数据

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

删除当前找到的数据

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

删除主键为10的数据

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

删除主键为10,11的数据

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

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

五、字段映射

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

在index.html内的代码如下:

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

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

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

 <?php
namespace Home\Model;
use Think\Model; class UserModel extends Model {
protected $_map = array(
'yonghu'=>'user', //这里是逗号
'youxiang'=>'email',
); //这里要加分号
}

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

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

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

CURD 操作 [2]的更多相关文章

  1. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  2. Laravel框架数据库CURD操作、连贯操作使用方法

    Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍.   Laravel是一套简洁.优雅的PHP Web开 ...

  3. php对xml文件进行CURD操作

    XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: ...

  4. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  5. LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作

    回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...

  6. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...

  7. 一个简单的ORM制作(CURD操作类)

    SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...

  8. Laravel框架数据库CURD操作、连贯操作总结

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 复制代码代码如下: $use ...

  9. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  10. 一行代码实现FMDB的CURD操作

    上次实现FMDB的CURD基本操作后,用在项目里,每个实体类都要写SQL语句来实现创建表和CURD操作,总觉得太麻烦,然后就想着利用反射和kvc来实现一个数据库操作的基类继承一下,子类只需要继承,然后 ...

随机推荐

  1. SVN服务器端客户端配置, 及对比VSS的优势

    SVN 版本服务器搭配全过程详解(含服务端.客户端) SVN服务器端及客户端全套软件 SVN对比VSS的优势 两者区别:http://www.cnblogs.com/zxjyuan/archive/2 ...

  2. java学习笔记 --- IO(1)

    1.File类:文件和目录(文件夹)路径名的抽象表示形式,把文件或者目录(文件夹)都封装成File对象 1.构造方法 File(String pathname):根据一个路径得到File对象 File ...

  3. Android Studio 学习 - Activity生命周期

    落下两晚了,继续学习…… 先粘贴2张官方给的流程图: ------------------------------------------------------------------------- ...

  4. CodeForces - 438D: The Child and Sequence(势能线段树)

    At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...

  5. [Luogu2371][国家集训队]墨墨的等式

    luogu 题意 给出\(n,a_i,B_{min},B_{max}\),求使得\(a_1x_1+a_2x_2+...+a_nx_n=B\)存在一组非负整数解的\(B\in[B_{min},B_{ma ...

  6. LeetCode Maximum Average Subarray I

    原题链接在这里:https://leetcode.com/problems/maximum-average-subarray-i/description/ 题目: Given an array con ...

  7. 【LeetCode】009. Palindrome Number

    Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...

  8. angular 的杂碎报错小知识

    1:[ng:areq] Angular出现这种错误的原因,是由于没有在页面中使用模块引入controller导致的 所以 请确保你定义了这个controller后也引用了它. 2:Failed to ...

  9. Linux驱动 - 多线程

    1.头文件 #include <linux/kthread.h> 2.定义变量 static pid_t thread_id: //线程ID static struct completio ...

  10. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis

    基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...