6.13 CURD操作
匿名 · 更新于 2013/12/25
ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建、更新、读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法。CURD操作通常是可以和连贯操作配合完成的。下面来分析下各自的用法:
(下面的CURD操作我们均以M方法创建模型实例来说明,因为不涉及到具体的业务逻辑)
(下面的CURD操作我们均以M方法创建模型实例来说明,因为不涉及到具体的业务逻辑)
1
创建(Create)
在ThinkPHP中使用add方法新增数据到数据库(而并不是create方法)。| add 写入(新增)数据到数据库 | |
|---|---|
| 用法 | add($data='',$options=array(),$replace=false) |
| 参数 |
data(可选):要新增的数据,支持数组和对象,如果留空取当前数据对象
|
$User = M("User"); // 实例化User对象$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->add($data);
$User->data($data)->add();
使用create方法的例子:
$User = M("User"); // 实例化User对象// 根据表单提交的POST数据创建数据对象$User->create();$User->add(); // 根据条件保存修改的数据
从2.1版开始恢复了批量插入数据的addAll方法(仅针对Mysql数据库),如:
$User->addAll($data)
add($data='',$options=array(),$replace=false)
8
读取(Read)
在ThinkPHP中读取数据的方式很多,通常分为读取数据和读取数据集。读取数据集使用select方法(新版已经废除原来的findall方法):
| select 查询数据集 | |
|---|---|
| 用法 | select($options=array()) |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;如果是数字或者字符串,表示主键值。默认为空数组。 |
| 回调接口 | 查询成功 _after_select(&$resultSet,$options) |
| 返回值 |
查询错误返回false
|
$User = M("User"); // 实例化User对象// 查找status值为1的用户数据 以创建时间排序 返回10条数据$list = $User->where('status=1')->order('create_time')->limit(10)->select();
2
读取数据使用find方法:
读取数据的操作其实和数据集的类似,select可用的所有连贯操作方法也都可以用于find方法,区别在于find方法最多只会返回一条记录,因此limit方法对于find查询操作是无效的。
下面是一些查询的例子:
| find 查询数据 | |
|---|---|
| 用法 | find($options=array()) |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 回调接口 | 查询后 _after_find(&$result,$options) |
| 返回值 |
如果查询错误返回false
|
下面是一些查询的例子:
$User = M("User"); // 实例化User对象// 查找status值为1name值为think的用户数据$User->where('status=1 AND name="think"')->find();
1
如果要读取某个字段的值,可以使用getField方法
示例如下:
如果需要返回数组,可以用:
如果传入多个字段的名称,例如:
如果我们传入一个字符串分隔符:
getField方法的sepa参数还可以支持限制数量,例如:
| getField 查询某个字段的值 | |
|---|---|
| 用法 | getField($field,$sepa=null) |
| 参数 |
field(必须):要获取的字段字符串(多个用逗号分隔)
|
$User = M("User"); // 实例化User对象// 获取ID为3的用户的昵称$nickname = $User->where('id=3')->getField('nickname');
如果需要返回数组,可以用:
$this->getField('id',true); // 获取id数组
$User = M("User"); // 实例化User对象// 获取所有用户的ID和昵称列表$list = $User->getField('id,nickname');
如果传入多个字段的名称,例如:
$list = $User->getField('id,nickname,email');
如果我们传入一个字符串分隔符:
$list = $User->getField('id,nickname,email',':');
getField方法的sepa参数还可以支持限制数量,例如:
$this->getField('id,name',5); // 限制返回5条记录$this->getField('id',3); // 获取id数组 限制3条记录
3
更新(Update)
在ThinkPHP中使用save方法更新数据库,并且也支持连贯操作的使用。| save 更新数据到数据库 | |
|---|---|
| 用法 | save($data='',$options=array()) |
| 参数 |
data:要保存的数据,如果为空,则取当前的数据对象。
|
$User = M("User"); // 实例化User对象// 要修改的数据对象属性赋值$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->where('id=5')->save($data); // 根据条件保存修改的数据
因此下面的代码不会更改数据库的任何记录
$User->save($data);
$User = M("User"); // 实例化User对象// 要修改的数据对象属性赋值$data['id'] = 5;$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->save($data); // 根据条件保存修改的数据
还有一种方法是通过create或者data方法创建要更新的数据对象,然后进行保存操作,这样save方法的参数可以不需要传入。
$User = M("User"); // 实例化User对象// 要修改的数据对象属性赋值$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->where('id=5')->data($data)->save(); // 根据条件保存修改的数据
$User = M("User"); // 实例化User对象// 根据表单提交的POST数据创建数据对象$User->create();$User->save(); // 根据条件保存修改的数据
上面的情况,表单中必须包含一个以主键为名称的隐藏域,才能完成保存操作。
如果只是更新个别字段的值,可以使用setField方法。
使用示例:
如果只是更新个别字段的值,可以使用setField方法。
| setField 更新某个字段的值 | |
|---|---|
| 用法 | setField($field,$value='') |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 返回值 |
如果查询错误返回false
|
$User = M("User"); // 实例化User对象// 更改用户的name值$User-> where('id=5')->setField('name','ThinkPHP');
$User = M("User"); // 实例化User对象// 更改用户的name和email的值$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');$User-> where('id=5')->setField($data);
1
而对于统计字段(通常指的是数字类型)的更新,系统还提供了setInc和setDec方法。
| setInc /setDec 字段增长/字段减少 | |
|---|---|
| 用法 |
setInc($field,$step=1)字段值增长
|
$User = M("User"); // 实例化User对象$User->where('id=5')->setInc('score',3); // 用户的积分加3$User->where('id=5')->setInc('score'); // 用户的积分加1$User->where('id=5')->setDec('score',5); // 用户的积分减5$User->where('id=5')->setDec('score'); // 用户的积分减1
3
删除(Delete)
在ThinkPHP中使用delete方法删除数据库中的记录。| 用法 | delete($options=array()) |
| 参数 | options:为数组的时候表示操作表达式,通常由连贯操作完成,如果没有传入任何删除条件,则取当前数据对象的主键作为条件;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 回调接口 | 删除成功后 _after_delete($data,$options) |
| 返回值 |
如果查询错误返回false
|
$User = M("User"); // 实例化User对象$User->where('id=5')->delete(); // 删除id为5的用户数据$User->where('status=0')->delete(); // 删除所有状态为0的用户数据
// 删除所有状态为0的5 个用户数据 按照创建时间排序$User->where('status=0')->order('create_time')->limit('5')->delete();
