掌握Thinkphp3.2.0----CURD

Posted GOFighting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了掌握Thinkphp3.2.0----CURD相关的知识,希望对你有一定的参考价值。

TP-----CURD

 create()创建数据----整理数据

  在数据库添加等操作之前,我们首先需要对数据进行创建。何为数据创建,就是接受提
交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有
效的验证、完成、生成等工作。

值得注意的是:

  这里 create()方法就是数据创建,数据的结果就是提交的 POST 数据的键值对。
特别注意的是:提交过来的字段和数据表字段是对应的,否则无法解析。

手动创建数据---即使是手动创建的数据也得与表字段对应,否则无法被解析

1 //通过数组手工获取数据,覆盖提交的
2 $user = M(\'User\');
3 $data[\'user\'] = $_POST[\'user\'];
4 $data[\'email\'] = $_POST[\'email\'];
5 $data[\'date\'] = date(\'Y-m-d H:i:s\'); //和数据表对应,否则无效
6 var_dump($user->create($data));

 利用对象来覆盖数据

1 //通过对象手工获取数据,覆盖提交的
2 $user = M(\'User\');
3 $data = w new \\stdClass();
4 $data->user = $_POST[\'user\'];
5 $data->email = $_POST[\'email\'];
6 $data->date = date(\'Y-m-d H:i:s\');

 更改默认POST的方式,为GET

1 //默认是$_POST,传递$_GET修改
2 $user = M(\'User\');
3 var_dump($user->create($_GET));

 

提高:

create()方法可以传递第二个参数, 将要操作的模式, 有两种: Model::MODEL_INSERT
和 Model::MODEL_UPDATE,即新增和修改。当没有指定的时候,系统会根据数据源是否包
含主键来自动判断,如果包含主键,则就是修改操作。

1 //设置将要新增操作
2 $user = M(\'User\');
3 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,用于定义合法的字段;
2.validate,用于数据自动验证;
3.auto,用于数据自动完成;
4.token,用于令牌验证。

1 //限制可操作的字段
2 $user = M(\'User\');
3 var_dump($user->field(\'user\')->create());
4 //在模型类里限制字段
5 s class UserModel s extends Model {
6 d protected $insertFields = \'user\';
7 d protected $updateFields = \'user\';
8 }

 

数据写入-----add(),返回ID

 1 //新增一条数据
 2 $user = M(\'User\');
 3 $data[\'user\'] = \'李炎恢\';
 4 $data[\'email\'] = \'yc60.com@gmail.com\';
 5 $data[\'date\'] = date(\'Y-m-d H:i:s\');
 6 $user->add($data);
 7 //结合create()方法
 8 $user = M(\'User\');
 9 $data = $user->create();
10 $data[\'date\'] = date(\'Y-m-d H:i:s\');
11 $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 注释;

1 //使用data连贯方法
2 $user = M(\'User\');
3 $data = $user->create();
4 $data[\'date\'] = date(\'Y-m-d H:i:s\');
5 $user->data($data)->add();
6 //data连贯方法 支持字符串、数组、对象
7 $user = M(\'User\');
8 $data = \'user=星矢&mail=xinshi@qq.com&date=\'.date(\'Y-m-d H:i:s\');
9 $user->data($data)->add();

 

数据读取

主要有: select()--显示所有的数据

     find()--显示所有数据中的第一条

    getFeild()--根据字段获取数据

支持17连贯操作,前边已经介绍过

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 //显示默认第一条数据
 2 $user = M(\'User\');
 3 var_dump($user->find()); //可以传递数字参数,AR 模式
 4 //显示默认所有数据
 5 $user = M(\'User\');
 6 var_dump($user->select()); //可以传递数组形式的 SQL
 7 //获取第一条user字段的值
 8 $user = M(\'User\');
 9 var_dump($user->getField(\'user\'));
10 //获取所有user字段的值
11 $user = M(\'User\');
12 var_dump($user->getField(\'user\', true));
13 //传递多个字段,获取所有
14 $user = M(\'User\');
15 var_dump($user->getField(\'user,email\'));
16 //没有分隔符和select相同,id冒号分隔
17 $user = M(\'User\');
18 var_dump($user->getField(\'id,user,email\',\':\'));
19 //限制2条数据
20 $user = M(\'User\');
21 var_dump($user->getField(\'id,user,email\',2));

数据更新---save()--修改,setField()--设置某一个值,setInc()--累加,setDec()--累减

数据更新的 save()方法支持的连贯方法有:
1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;
5.order,结果排序;
6.lock,锁;
7.relation,关联查询;
8.scope,命名范围;
9.bind,数据绑定操作;
10.comment,SQL 注释。

 1 //修改第一条数据
 2 $user = M(\'User\');
 3 $data[\'user\'] = \'蜡笔大新\';
 4 $data[\'email\'] = \'daxin@qq.com\';
 5 $map[\'id\'] = 1;
 6 $user->where($map)->save($data); //成功后返回 1,否则 0
 7 //默认主键为条件
 8 $user = M(\'User\');
 9 $data[\'id\'] = 1;
10 $data[\'user\'] = \'蜡笔小新\';
11 $data[\'email\'] = \'xiaoxin@163.com\';
12 $user->save($data);
13 //结合create()
14 $user = M(\'User\');
15 $user->create(); //POST必须包含主键
16 $user->save();
17 //修改某一个值
18 $user = M(\'User\');
19 $map[\'id\'] = 1;
20 $user->where($map)->setField(\'user\', \'蜡笔大新\');
21 //统计累计,累加累减
22 $user = M(\'User\');
23 $map[\'id\'] = 1;
24 $user->where($map)->setInc(\'count\',1); //累加,setDec 累减

 

数据删除----delete()

delete()方法支持的连贯操作有:
1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.order,结果排序;
5.lock,锁;
6.relation,关联查询;
7.scope,命名范围;
8.bind,数据绑定操作;
9.comment,SQL 注释。

 1 //直接删除主键(id=17)
 2 $user = M(\'User\');
 3 $user->delete(17);
 4 //根据ID来删除
 5 $user = M(\'User\');
 6 $map[\'id\'] = 16;
 7 $user->where($map)->delete();
 8 //批量删除多个
 9 $user = M(\'User\');
10 $user->delete(\'1,3,5\');
11 //删除count为0且按时间倒序的前五个
12 $user = M(\'User\');
13 $map[\'count\'] = 0;
14 $user->where($map)->order(array(\'date\'=>\'DESC\'))->limit(5)->delete();
15 //删除所有数据,谨慎
16 $user = M(\'User\');
17 echo $user->where(\'1\')->delete();

 

ActiveReocrd模式  AR模式,只有对比才能深刻的理解,这种方法很方便

 1 //添加一条数据
 2 $user = M(\'User\');
 3 $user->user = \'火影忍者\';
 4 $user->email = \'huoyin@qq.com\';
 5 $user->date = date(\'Y-m-d H:i:s\');
 6 $user->add();
 7 //结合create
 8 $user = M(\'User\');
 9 $user->create();
10 $user->date = date(\'Y-m-d H:i:s\');
11 $user->add();
12 //找到主键为4的值
13 $user = M(\'User\');
14 var_dump($user->find(4));
15 //查找user=蜡笔小新的记录
16 $user = M(\'User\');
17 var_dump($user->getByUser(\'蜡笔小新\'));
18 //输出user
19 o echo $user->user;
20 //通过主键查询多个
21 $user = M(\'User\');
22 var_dump($user->select(\'1,2,3\'));
23 //修改一条数据
24 $user = M(\'User\');
25 $user->find(1);
26 $user->user = \'蜡笔老新\';
27 $user->save();
28 //删除当前找到的数据
29 $user = M(\'User\');
30 $user->find(11);
31 $user->delete();
32 //删除主键为10的数据
33 $user = M(\'User\');
34 $user->delete(10);
35 //删除主键为10,11的数据
36 $user = M(\'User\');
37 $user->delete(\'10,11\');

 

字段映射---一般情况不用,直接对应就行

 1 //字段映射可以将表单里的 name 名称对应到数据表里的字段,这样防止系统
 2 //自动屏蔽掉
 3 //不对应的 POST 值。
 4 //字段映射
 5 d protected $_map =  array(
 6 \'xingming\'=>\'user\',
 7 \'youxiang\'=>\'email\',
 8 );
 9 //字段映射获取
10 $user = D(\'User\');
11 var_dump($user->create());

 

以上是关于掌握Thinkphp3.2.0----CURD的主要内容,如果未能解决你的问题,请参考以下文章

多个岗位需要的sql语言 你掌握了吗?简单例子+详细代码带你一文掌握

多个岗位需要的sql语言 你掌握了吗?简单例子+详细代码带你一文掌握

# 掌握代码级测试的基本理念与方法

一文掌握vscode远程调试python代码

一文掌握vscode远程调试python代码

javascript 掌握反应 - 组件(代码与莫什)