首页 > 代码库 > thinkPHP--CURD操作
thinkPHP--CURD操作
1.数据创建 2.数据写入 3.数据读取 4.数据更新 5.数据删除
一.数据创建 在数据库添加等操作之前,我们首先需要对数据进行创建。何为数据创建,就是接受提 交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有 效的验证、完成、生成等工作。
//根据表单提交的POST数据,创建数据对象 $user = M(‘User‘); var_dump($user->create()); PS:这里 create()方法就是数据创建,数据的结果就是提交的 POST 数据的键值对。
特别注意的是:提交过来的字段和数据表字段是对应的,否则无法解析。
//通过数组手工获取数据,覆盖提交的 $user = M(‘User‘); $data[‘user‘] = $_POST[‘user‘]; $data[‘email‘] = $_POST[‘email‘]; $data[‘date‘] = date(‘Y-m-d H:i:s‘);
//和数据表对应,否则无效 var_dump($user->create($data));
//通过对象手工获取数据,覆盖提交的 $user = M(‘User‘); $data = http://www.mamicode.com/new /stdClass(); $data->user = $_POST[‘user‘]; $data->email = $_POST[‘email‘]; $data->date = date(‘Y-m-d H:i:s‘); var_dump($user->create($data));
//默认是$_POST,传递$_GET修改 $user = M(‘User‘); var_dump($user->create($_GET)); create()方法可以传递第二个参数,将要操作的模式,有两种:Model::MODEL_INSERT 和 Model::MODEL_UPDATE,即新增和修改。当没有指定的时候,系统会根据数据源是否包 含主键来自动判断,如果包含主键,则就是修改操作。
//设置将要新增操作 $user = M(‘User‘); var_dump($user->create($_POST, Model::MODEL_INSERT));
create()方法的内部工作分为 9 步:
1.获取数据源(默认是 POST); 2.验证数据合法性(非数据或对象会过滤),失败则返回 false; 3.检查字段映射; 4.判断数据状态(新增还是修改); 5.数据自动验证,失败则返回 false; 6.表单令牌验证,失败则返回 false; 7.表单数据赋值(过滤非法字段和字符串处理); 8.数据自动完成; 9.生成数据对象(保存在内存)。
create()方法可以配合连贯操作配合数据创建,支持的连贯操作有:
1.field,用于定义合法的字段; var_dump($user->field(‘user‘)->create()); 2.validate,用于数据自动验证; 3.auto,用于数据自动完成; 4.token,用于令牌验证。 //限制可操作的字段 $user = M(‘User‘); var_dump($user->field(‘user‘)->create()); //在模型类里限制字段 class UserModel extends Model { protected $insertFields = ‘user‘; protected $updateFields = ‘user‘; }
二.数据写入 数据写入使用的是 add()方法。
//新增一条数据 $user = M(‘User‘); $data[‘user‘] = ‘李炎恢‘; $data[‘email‘] = ‘yc60.com@gmail.com‘; $data[‘date‘] = date(‘Y-m-d H:i:s‘); $user->add($data);
//结合create()方法 $user = M(‘User‘); $data = http://www.mamicode.com/$user->create(); $data[‘date‘] = date(‘Y-m-d H:i:s‘); $user->add($data); add()方法支持的连贯操作有:
1.table,定义数据表名称;
2.data,指定要写入的数据对象;
3.field,定义要写入的字段;
4.relation,关联查询;
5.validate,数据自动验证;
6.auto,数据自动完成;
7.filter,数据过滤;
8.scope*,命名范围;
9.bind,数据绑定操作;
10.token,令牌验证;
11.comment,SQL 注释; //使用data连贯方法 $user = M(‘User‘); $data = http://www.mamicode.com/$user->create(); $data[‘date‘] = date(‘Y-m-d H:i:s‘); $user->data($data)->add(); //data连贯方法 支持字符串、数组、对象 $user = M(‘User‘); $data = ‘user=星矢&mail=xinshi@qq.com&date=‘.date(‘Y-m-d H:i:s‘); $user->data($data)->add();
三.数据读取
在之前的课程中,我们已经大量使用了数据读取的功能,比如 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 注释。
//显示默认第一条数据 $user = M(‘User‘); var_dump($user->find());
//可以传递数字参数,AR 模式
//显示默认所有数据 $user = M(‘User‘); var_dump($user->select());
//可以传递数组形式的 SQL //获取第一条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‘,‘:‘));
//限制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
//默认主键为条件 $user = M(‘User‘); $data[‘id‘] = 1; $data[‘user‘] = ‘蜡笔小新‘; $data[‘email‘] = ‘xiaoxin@163.com‘; $user->save($data);
数据更新的 save()方法支持的连贯方法有:
1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;
5.order,结果排序;
6.lock,锁;
7.relation,关联查询;
8.scope,命名范围;
9.bind,数据绑定操作;
10.comment,SQL 注释。
//结合create() $user = M(‘User‘); $user->create();
//POST必须包含主键 $user->save();
//修改某一个值 $user = M(‘User‘); $map[‘id‘] = 1; $user->where($map)->setField(‘user‘, ‘蜡笔大新‘);
//统计累计,累加累减 $user = M(‘User‘); $map[‘id‘] = 1; $user->where($map)->setInc(‘count‘,1);
//累加,setDec 累减
五.数据删除
数据删除使用的方法是 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‘); echo $user->where(‘1‘)->delete();
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(11); $user->delete();
//删除主键为10的数据 $user = M(‘User‘); $user->delete(10);
//删除主键为10,11的数据 $user = M(‘User‘); $user->delete(‘10,11‘);
七.字段映射
字段映射可以将表单里的 name 名称对应到数据表里的字段,这样防止系统自动屏蔽掉 不对应的 POST 值。
//字段映射 protected $_map = array( ‘xingming‘=>‘user‘, ‘youxiang‘=>‘email‘, );
//字段映射获取 $user = D(‘User‘); var_dump($user->create());
thinkPHP--CURD操作