| add 写入(新增)数据到数据库 | |
|---|---|
| 用法 | add($data='',$options=array(),$replace=false) |
| 参数 | data(可选):要新增的数据,支持数组和对象,如果留空取当前数据对象 options(可选):操作表达式,通常由连贯操作完成,默认为空数组 replace(可选):是否允许写入时更新,默认为false(个别数据库支持) |
| 回调接口 | 写入前 _before_insert(&$data,$options) 写入成功 _after_insert($data,$options) |
| 返回值 | 如果数据非法或者查询错误则返回false 如果是自增主键 则返回主键值,否则返回1 |
| 相关方法 | 通常和data、create方法配合使用 |
$User = M("User"); // 实例化User对象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->add($data);或者使用data方法连贯操作$User->data($data)->add();如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。$User = M("User"); // 实例化User对象
// 根据表单提交的POST数据创建数据对象
$User->create();
$User->add(); // 根据条件保存修改的数据如果你的主键是自动增长类型,并且如果插入数据成功的话,Add方法的返回值就是最新插入的主键值,可以直接获取。 $User->addAll($data)同时在数据插入时允许更新操作:add($data='',$options=array(),$replace=false)其中add方法增加$replace参数(是否添加数据时允许覆盖),true表示覆盖,默认为false| select 查询数据集 | |
|---|---|
| 用法 | select($options=array()) |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;如果是数字或者字符串,表示主键值。默认为空数组。 |
| 回调接口 | 查询成功 _after_select(&$resultSet,$options) |
| 返回值 | 查询错误返回false 查询结果为空返回null 查询成功返回查询的结果集(二维索引数组) |
| 相关方法 | 通常配合连贯操作where、field、order、limit、join等一起使用 |
$User = M("User"); // 实例化User对象
// 查找status值为1的用户数据 以创建时间排序 返回10条数据
$list = $User->where('status=1')->order('create_time')->limit(10)->select();Select方法配合连贯操作方法可以完成复杂的数据查询。而最复杂的连贯方法应该是where方法的使用,因为这部分涉及的内容较多,我们会在查询语言部分就如何进行组装查询条件进行详细的使用说明。基本的查询暂时不涉及关联查询部分,而是统一采用关联模型来进行数据操作,这一部分请参考关联模型部分。读取数据使用find方法:| find 查询数据 | |
|---|---|
| 用法 | find($options=array()) |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 回调接口 | 查询后 _after_find(&$result,$options) |
| 返回值 | 如果查询错误返回false 如果查询结果为空返回null 如果查询成功返回查询的结果(索引数组) |
| 相关方法 | 通常配合连贯操作where、field、order、join等一起使用 |
$User = M("User"); // 实例化User对象
// 查找status值为1name值为think的用户数据
$User->where('status=1 AND name="think"')->find();即使满足条件的数据不止一条,find方法也只会返回第一条记录。如果要读取某个字段的值,可以使用getField方法| getField 查询某个字段的值 | |
|---|---|
| 用法 | getField($field,$sepa=null) |
| 参数 | field(必须):要获取的字段字符串(多个用逗号分隔) sepa(可选):字段数据间隔符号,如果是 NULL返回数组为数组。默认为null。 |
| 回调接口 | 查询后 _after_find(&$result,$options) |
| 返回值 | 如果查询结果为空返回null 如果field是一个字段则返回该字段的值 如果field是多个字段,返回数组。数组的索引是第一个字段的值,sepa为null则返回二维数组。 |
| 相关方法 | 通常配合连贯操作where、limit、order等一起使用 |
$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是一个数组,键名是用户的id, 键值是用户的昵称nickname。$list = $User->getField('id,nickname,email');返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。$list = $User->getField('id,nickname,email',':');那么返回的结果就是一个数组,键名是用户id,键值是 nickname:email的输出字符串。$this->getField('id,name',5); // 限制返回5条记录
$this->getField('id',3); // 获取id数组 限制3条记录可以配合使用order方法使用。| save 更新数据到数据库 | |
|---|---|
| 用法 | save($data='',$options=array()) |
| 参数 | data:要保存的数据,如果为空,则取当前的数据对象。 options:为数组的时候表示操作表达式,通常由连贯操作完成;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 回调接口 | 更新前_before_update(&$data,$options) 更新成功后 _after_update($data,$options) |
| 返回值 | 如果查询错误或者数据非法返回false 如果更新成功返回影响的记录数 |
| 相关方法 | 通常配合连贯操作where、field、order等一起使用 |
$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->where('id=5')->save($data); // 根据条件保存修改的数据为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。$User->save($data); 除非使用下面的方式:$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->save($data); // 根据条件保存修改的数据如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值。$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->where('id=5')->data($data)->save(); // 根据条件保存修改的数据使用create方法的例子:$User = M("User"); // 实例化User对象
// 根据表单提交的POST数据创建数据对象
$User->create();
$User->save(); // 根据条件保存修改的数据上面的情况,表单中必须包含一个以主键为名称的隐藏域,才能完成保存操作。| setField 更新某个字段的值 | |
|---|---|
| 用法 | setField($field,$value='') |
| 参数 | options(可选):为数组的时候表示操作表达式,通常由连贯操作完成;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 返回值 | 如果查询错误返回false 如果更新成功返回影响的记录数 |
| 相关方法 | 必须配合连贯操作where一起使用 |
$User = M("User"); // 实例化User对象
// 更改用户的name值
$User-> where('id=5')->setField('name','ThinkPHP');setField方法支持同时更新多个字段,只需要传入数组即可,例如:$User = M("User"); // 实例化User对象
// 更改用户的name和email的值
$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$User-> where('id=5')->setField($data);而对于统计字段(通常指的是数字类型)的更新,系统还提供了setInc和setDec方法。| setInc /setDec 字段增长/字段减少 | |
|---|---|
| 用法 | setInc($field,$step=1)字段值增长 setDec($field,$step=1)字段值减少 |
| 参数 | field:要更新的字段名。 step:增长或者减少的数值,默认为1。 |
| 回调接口 | 如果查询错误返回false 如果更新成功返回影响的记录数 |
| 返回值 | 如果查询错误返回false 如果更新成功返回影响的记录数 |
| 相关方法 | 必须配合连贯操作where一起使用 |
$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| 用法 | delete($options=array()) |
| 参数 | options:为数组的时候表示操作表达式,通常由连贯操作完成,如果没有传入任何删除条件,则取当前数据对象的主键作为条件;为数字或者字符串的时候表示主键值。默认为空数组。 |
| 回调接口 | 删除成功后 _after_delete($data,$options) |
| 返回值 | 如果查询错误返回false 如果删除成功返回影响的记录数 |
| 相关方法 | 通常配合连贯操作where、field、order等一起使用 |
$User = M("User"); // 实例化User对象
$User->where('id=5')->delete(); // 删除id为5的用户数据
$User->where('status=0')->delete(); // 删除所有状态为0的用户数据delete方法可以用于删除单个或者多个数据,主要取决于删除条件,也就是where方法的参数,也可以用order和limit方法来限制要删除的个数,例如:// 删除所有状态为0的5 个用户数据 按照创建时间排序
$User->where('status=0')->order('create_time')->limit('5')->delete();