掌握Thinkphp3.2.0----CURD
TP-----CURD
create()创建数据----整理数据
在数据库添加等操作之前,我们首先需要对数据进行创建。何为数据创建,就是接受提
交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有
效的验证、完成、生成等工作。
值得注意的是:
这里 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 = w new \stdClass();
$data->user = $_POST['user'];
$data->email = $_POST['email'];
$data->date = date('Y-m-d H:i:s');
更改默认POST的方式,为GET
//默认是$_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,用于定义合法的字段;
2.validate,用于数据自动验证;
3.auto,用于数据自动完成;
4.token,用于令牌验证。
//限制可操作的字段
$user = M('User');
var_dump($user->field('user')->create());
//在模型类里限制字段
s class UserModel s extends Model {
d protected $insertFields = 'user';
d protected $updateFields = 'user';
}
数据写入-----add(),返回ID
//新增一条数据
$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 = $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 = $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()--显示所有的数据
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 注释。
//显示默认第一条数据
$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'));
//没有分隔符和select相同,id冒号分隔
$user = M('User');
var_dump($user->getField('id,user,email',':'));
//限制2条数据
$user = M('User');
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 注释。
//修改第一条数据
$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);
//结合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()
delete()方法支持的连贯操作有:
1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.order,结果排序;
5.lock,锁;
6.relation,关联查询;
7.scope,命名范围;
8.bind,数据绑定操作;
9.comment,SQL 注释。
//直接删除主键(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();
ActiveReocrd模式 AR模式,只有对比才能深刻的理解,这种方法很方便
//添加一条数据
$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
o 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 值。
//字段映射
d protected $_map = array(
'xingming'=>'user',
'youxiang'=>'email',
);
//字段映射获取
$user = D('User');
var_dump($user->create());
掌握Thinkphp3.2.0----CURD的更多相关文章
- yii2.0 curd操作
$customer=new Customer();//插入操作 $customer->name='小熊'; $customer->save(); //修改操作 $model=Custome ...
- yii2.0 curd操作数据写法
一.执行原生sql查询,创建yii\db\Command insert(),update(),delete()直接构建,相应的sql语句 查: 1.查询一条 \Yii::$app-&g ...
- YII 1.0 常用CURD写法
<?php //yii1.0 curd简单写法 //查询 Yii::app()->db->createCommand($sql)->queryAll();//查询所有行数据 ...
- 掌握Thinkphp3.2.0----模型初步
1.为什么要学习框架?框架是什么? 简单的说就是为了简单,提高开发的效率.至于什么是框架(一种规范),现在的我还不是很理解,容后再议. 学习框架最重要的就是遵循,按照开发者的意图来使用该框架. 2.t ...
- 使用mybatis plus自动生成controller、service、dao、mapper、entity代码
官网:http://mp.baomidou.com(这个项目不仅仅可以用于代码生成,还有分页等其他功能,是对mybatis的一层封装) 要求:基于sql自动生成domain.controller.se ...
- 【LeetCode】1041. Robot Bounded In Circle 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 找规律 日期 题目地址:https://leetco ...
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- osg编译日志
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
随机推荐
- Angular2 模板语法
1. 说明 Angular2的模板用来显示组件外观,作为视图所用,用法和html语法基本一致,最简单的Angular2的模板就是一段html代码.Angular模板语法主要包括以下几个部分: l 直接 ...
- MySQL MHA 搭建&测试
一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...
- 编译带有PROJ4和GEOS模块的GDAL
1.下载三个软件的源代码(去各自官网下载即可) 2.将PROJ4和GEOS的源码放到GDAL目录下的supportlibs文件夹中. 3.修改GDAL的nmake.opt文件,部分内容如下: # Un ...
- Android -- Activity,Fragment lifecycle
Activity Lifecyce Fragment Lifecycle: 程序运行: 09-16 13:59:22.883 19022-19022/com.example.android.archi ...
- nginx,apache,tomcat配置https的阿里提供的文档
安装证书 ( 1 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到 # HTTPS server # #server { # listen 443; # serv ...
- SignalR 2.1 简单入门项目
概述 SignalR是通讯框架,前台Web页面与后台服务实现数据的交互.ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时We ...
- 【leetcode】Search for a Range
题目描述: Given a sorted array of integers, find the starting and ending position of a given target valu ...
- 【maven】maven创建web项目-pom文件提示web.xml is missing and <failOnMissingWebXml> is set to true
使用maven创建web项目,选择war类型后,pom文件红叉 提示web.xml is missing and <failOnMissingWebXml> is set to true ...
- Listview的使用
最近一个多月忙着使用新的技术来做项目,现在项目上线了,嗯,发现android有些生疏了,所以今天特地写了这一篇博客来相信的讲解一些基础知识,同事呢,也可以让我温故知新一下.进入正题. 什么是listv ...
- 重置按钮小tip—为何不能重置表单数据呢
刚开始学html的同志有时候可能会遇到一个问题,就是为什么在编辑页面里面的重置按钮总是不起作用呢不清空数据呢?接下来就说明一下原因. Reset 对象 Reset 对象代表 HTML 表单中的一个重置 ...