1.数据创建(create)

接受提交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有效的验证、完成、生成等工作

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

通过$_post接收数据

      //通过数组手工获取数据,覆盖提交的
$data['name']='qqq';
$data['password']="456";
$data['email']="qqq@qq.com";
$data['age']=52;
var_dump($user->create($data));
//通过对象手工获取数据,覆盖提交的
$data=new \stdClass();
$data->name=$_POST['name'];
$data->password=$_POST['password'];
$data->email=$_POST['email'];
$data->age=$_POST['age'];
var_dump($user->create($data));
// 默认是$_POST,传递$_GET修改
var_dump($user->create($_GET));

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

操作

      // 设置将要新增操作
var_dump($user->create($_POST,Model::MODEL_INSERT));

      //限制可操作的字段
// 提交过来的数据只会接收name字段的值
var_dump($user->field('name')->create());

2.数据写入(add)

数据写入使用的是 add()方法。

     //新增一条数据
// sql:INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('caiminfang','123','caiminfang@qq.com',15)
$user=M('user1');
$data['name']='caiminfang';
$data['password']="123";
$data['email']="caiminfang@qq.com";
$data['age']=15;
$user->add($data);
// 结合create()方法
// INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('cmfcmf','456','cmf@qq.com',18)
    $data $user->create();
$data['name']=$_POST['name'];
$data['password']=$_POST['password'];
$data['email']=$_POST['email'];
$data['age']=$_POST['age'];
$user->add($data);

      //INSERT INTO `user1` (`name`) VALUES ('asdasd')
//使用data连贯操作
$user=M('user1');
$data=$user->create();
$data['name']='asdasd';
var_dump($user->data($data)->add()); // data连贯方法,支持字符串、数组、对象
// INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('xingshi','123','xingshi@qq.com',55)
$data='name=xingshi&password=123&email=xingshi@qq.com&age=55';
$user->data($data)->add();

3.数据读取(select)

支持连贯方法的有:http://www.cnblogs.com/8013-cmf/p/8317720.html(请阅读此篇文章)

field和getField的区别:

  1.  field():用于定义要查询的字段
  2. getField():用于查询某个字段的值
      $user=M('user1');
//显示所有数据
// SELECT * FROM `user1`
var_dump($user->select()); //显示默认第一条数据
// SELECT * FROM `user1` LIMIT 1
var_dump($user->find()); // 获取第一条name字段的值
// SELECT `name` FROM `user1` LIMIT 1
var_dump($user->getField('name')); // 获取所有user字段的name值
// SELECT `name` FROM `user1`
var_dump($user->getField('name',true)); //获取所有user的name值和email值
// SELECT `name`,`email` FROM `user1`
var_dump($user->getField('name,email')); //以冒号分隔
// SELECT `name`,`email`,`age` FROM `user1`
var_dump($user->getField('name,email,age',":")); //限制2条数据
//SELECT `name`,`email` FROM `user1` LIMIT 2
var_dump($user->getField('name,email',2));

4.数据更新(save)

主要是对数据的修改操作。

      $user=M('user1');
//修改数据
// UPDATE `user1` SET `name`='zxczxc' WHERE `id` = 4
$data['name']="zxczxc";
$map['id']=4;
$user->where($map)->save($data); //默认主键为条件
// UPDATE `user1` SET `name`='hello' WHERE `id` = 3
$data['id']=3;
$data['name']="hello";
$user->save($data);

结合create使用save

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="post" action="http://localhost/basic_thinkphp/index.php/Home/Model/save">
<!-- 必须要定义id的默认值 -->
<input type="hidden" name="id" value="3">
用户名:<input type="text" name="name"><br/>
密码:<input type="text" name="password"><br/>
邮箱:<input type="text" name="email"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

ModelController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use Think\Model;
use Think\stdClass;
class ModelController extends Controller {
public function save(){
$user=M('user1');
// 结合create
// UPDATE `user1` SET `name`='test1',`password`='456',`email`='a@qq.com',`age`=88 WHERE `id` = 3
$user->create(); //post必须包含主键,我是在前端定义的
$user->save();
}
}
      $user=M('user1');
// 修改某一个值
// UPDATE `user1` SET `name`='labixiaoxin' WHERE `id` = 3
$map['id']=3;
$user->where($map)->setField('name','labixiaoxin'); //统计累计,累加累减
// UPDATE `user1` SET `age`=age+1 WHERE `id` = 3
$map['id']=3;
$user->where($map)->setInc('age',1);

5.数据删除(delete)

    $user=M('user1');
// 直接删除主键(id=8)
// DELETE FROM `user1` WHERE `id` = 8
$user->delete(8); //根据id删除
// DELETE FROM `user1` WHERE `id` = 47
$map['id']=47;
$user->where($map)->delete(); //批量删除多个
// DELETE FROM `user1` WHERE `id` IN ('45','46')
$user->delete("45,46"); //删除年龄为16且按照id倒序的前2个
// DELETE FROM `user1` WHERE `age` = 16 ORDER BY `id` DESC LIMIT 2
$map['age']=16;
$user->where($map)->order(array('id'=>'DESC'))->limit(2)->delete(); // 删除所有数据
echo $user->where('1')->delete();

6.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('蜡笔小新')); //输出userecho
$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'

【三十四】thinkphp之curd操作的更多相关文章

  1. Java第三十四天,IO操作(续集),非基本对象的读写——序列化流

    一.序列化与反序列化 以前在对文件的操作过程当中,读写的对象都是最基本的数据类型,即非引用数据类型.那么如果我们对饮用数据类型(即对象类型)数据进行读写时,应该如何做呢?这就用到了序列化与反序列化. ...

  2. 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...

  3. JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫

    JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ...

  4. spring boot 常见三十四问

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  5. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  6. FreeSql (三十四)CodeFirst 迁移说明

    FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...

  7. 风炫安全web安全学习第三十四节课 文件包含漏洞防御

    风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...

  8. COJ966 WZJ的数据结构(负三十四)

    WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u  ...

  9. NeHe OpenGL教程 第三十四课:地形

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  10. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

随机推荐

  1. Eloquent JavaScript #07# Project: A Robot

    索引 Notes Excercise Measuring a robot Robot efficiency Persistent group 注释即笔记: const roads = [ " ...

  2. oracle 9i/10gR2所有版本下载地址

    Oracle 9i Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP ht ...

  3. Strom学习笔记2:Storm Maven Project-StromStack工程

    1:IntelliJ新建Maven工程

  4. jbpm 6 vs activities 5评估(持续更新、亲测实际项目评估)

    最近我们有个使用了jbpm 6.2(6.2是一个较大的里程碑)的批处理模块,因为大BOSS一直觉得太重了,希望有更加轻量级的解决方案,因为我们基本上没有真正意义上流程的概念,只有静态的流程图,因为一直 ...

  5. 【题解】 P2234 [HNOI2002]营业额统计

    平衡树板题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 这道题目还算比较模板的 每输入一个数,先不要插入 要求一下前驱和后继与x差的最小值并加到答案中 再把x插入平衡树 然后你 ...

  6. 【题解】Luogu CF915E Physical Education Lessons

    原题传送门:CF915E Physical Education Lessons 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 这道题很简单啊 每个操作就是区间赋值,顺带把总和修 ...

  7. intel webrtc 部署

    org link conference server Configure the MCU server 1. set the maximum numbers of open files, runnin ...

  8. 关于centos7字体缺失导致项目验证码丢失报错500问题

    这个问题是这样的,迁移架构的时候项目验证码刷不出来, 页面报错500, 就像下面那样. tomcat报错是数组越界, 看下面 最诡异的是, 开发那边再三确定代码里面没有问题, 于是我试了一下把war包 ...

  9. left join加上where条件的困惑

    eft join的困惑:一旦加上where条件,则显示的结果等于inner join将where 换成 and 用where 是先连接然后再筛选   用and 是先筛选再连接 数据库在通过连接两张或多 ...

  10. 20145311 王亦徐《网络对抗技术》 逆向及BOF进阶实践

    20145311<网络对抗技术>逆向及BOF进阶实践 学习目的 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈 ...