讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

thinkphp实现基本的增删改查

阿辰大大_6360

阿辰大大_6360

发布时间:2017-02-10 16:52:31

|

5375人浏览过

|

来源于php中文网

原创

ThinkPHP提供了灵活和方便的数据操作方法,不仅实现了对数据库操作的四大基本操作(CURD):创建、读取、更新和删除的实现,还内置了很多实用的数据操作方法,接下来我们就一起来学习下这些基本的操作方法,并且在最后为大家准备了一个例子来加深理解。

新增数据

  // 实例化一个User模型对象    
  $User = new UserModel();    
  // 然后给数据对象赋值    
  $User->name = 'ThinkPHP';    
  $User->email = 'ThinkPHP@gmail.com';    
  // 然后就可以保存新建的User对象了    
  $User->add();    
  //如果需要锁实例化模型对象的时候传入数据,可以使用    
    $data['name'] = 'ThinkPHP';    
    $data['email'] = 'ThinkPHP@gmail.com';    
    $User = new UserModel($data);    
    $User->add();    
    // 或者直接在add方法传入要新建的数据    
    $data['name'] = 'ThinkPHP';    
    $data['email'] = 'ThinkPHP@gmail.com';    
    $User = new UserModel();    
    $User->add($data);

  


一般情况下,应用中的数据对象不太可能通过手动赋值的方式写入,而是有个数据对象的创建过程。ThinkPHP提供了一个create方法来创建数据对象,然后进行其它的新增或者编辑操作。


$User = D("User");    
$User->create(); // 创建User数据对象,默认通过表单提交的数据进行创建    
$User->add(); // 新增表单提交的数据


Create方法支持从其它方式创建数据对象,例如,从其它的数据对象,或者数组等


$data['name'] = 'ThinkPHP';    
$data['email'] = 'ThinkPHP@gmail.com';    
$User->create($data);    
 // 从User数据对象创建新的Member数据对象    
$Member = D("Member");    
$Member->create($User);

支持新增多条记录


$User = new UserModel();    
$data[0]['name'] = 'ThinkPHP';    
$data[0]['email'] = 'ThinkPHP@gmail.com';    
$data[1]['name'] = '流年';    
 $data[1]['email'] = 'liu21st@gmail.com';    
$User->addAll($data);


在MySql数据库下面,会自动使用一条SQL语句实现多数据的插入。

查询记录
读取数据库的记录我觉得是数据库操作中的最有意思的一件事情了,写过文本数据库的人都知道,保存和删除数据不难(无非是规范和效率问题),难在可以通过各种方式来查找需要的数据。ThinkPHP通过各种努力,让数据库的查询操作变得轻而易举,也让ThinkPHP变得富有内涵。
ThinkPHP
有一个非常明确的约定,就是单个数据查询和多个数据查询的方法是分开的,或者你会认为有时候自己也不知道要查询的数据是单个还是多个,但是有一点是明确的,你需要的是返回一个数据还是希望返回的是一个数据集。因为对两种类型的返回数据的操作方式是截然不同的,无论何种方式的返回,我们都可以直接在模型对象里面操作,当然也一样可以作为数据传递给你需要的变量。
先举个最简单的例子,假如我们要查询主键为8的某个用户记录,我们可以使用下面的一些方法:


 $User->find(8);


这个作为查询语言来说是最为直观的,如果查询成功,查询的结果直接保存在当前的数据对象中,在进行下一次查询操作之前,我们都可以提取,例如获取查询的结果数据:


$name = $User->name;    
$email = $User->email;

  

遍历查询到的数据对象属性 


 foreach ($User as $key=>$val){    
  echo($key.':'.$val);    
  }


// 或者进行相关的数据更改和保存操作
也可以用变量保存下来以便随时使用。 

$user = $User->find(8);

对于上面的查询条件,我们还可以使用getById来完成相同的查询

 $User->getById(8);

需要注意的是,对于find方法来说,即使查询结果有多条记录,也只会返回符合条件的第一条记录,如果要返回符合要求的所有记录,请使用findAll方法。


  // 查询主键为1、3、8的记录集     
  $User->findAll('1,3,8');     
   // 遍历数据列表    
    foreach ($User as $vo){dump($vo->name);    
    }

更新记录
了解了查询记录后,更新操作就显得非常简单了。 

  // 还可以使用下面的方式更新
  $User->find(1); // 查找主键为1的数据    
  $User->name = 'TOPThink'; // 修改数据对象    
  $User->save(); // 保存当前数据对象    
  $User->score = '(score+1)'; // 对用户的积分加1    
  $User->save();

 

如果不是使用数据对象的方式来保存,可以传入要保存的数据和条件 

 $data['id'] = 1;   
 $data['name'] = 'TopThink';   
 $User->save($data);

除了save方法外,你还可以使用setField方法来更新特定字段的值,例如: 

 $User->setField('name','TopThink','id=1');

同样可以支持对字段的操作 

 $User->setField('score','(score+1)','id=1');    
 // 或者改成下面的    
 $User->setInc('score','id=1');

删除记录

如果你的主键是自动增长类型,不需要传入主键的值就可以新建数据,并且如果插入数据成功的话,Add方法的返回值就是最新插入的主键值,可以直接获取。

 $User->find(2);    
 $User->delete(); // 删除查找到的记录    
 $User->delete('5,6'); // 删除主键为5、6的数据    
 $User->deleteAll(); // 删除查询出来的所有数据

看完上面的代码,我们就来写个实战的例子加深下。

数据显示页面:MainController.class.php中的方法

立即学习“PHP免费学习笔记(深入)”;

<?php
namespace Home\Controller;
use Think\Controller;
class MainController extends Controller
{    

    //例题:数据的增删改
    //显示所有数据:
    function ShowInfo()
    {
        $model=D("Info");
        $attr=$model->field("info.code as infocode,info.name as infoname,info.sex,nation.name as nationname,info.birthday")->join("nation on info.nation=nation.code")->select();
        $this->assign("shuju",$attr);
        $this->display();
        
    }
    //删除数据:
    function ShanChu($code)
    {
        $model=D("Info");
        $r=$model->delete($code);
        if($r)
        {
            $this->success("删除成功",U("ShowInfo"));
        }
        else
        {        
            $this->error("删除失败");
        }
        
    }
    //添加数据:
    function TianJia()
    {
        if(empty($_POST))
        {
            $model=D("Nation");
            $attr=$model->select();
            $this->assign("shuju",$attr);
            $this->display();
        }
        else
        {
            $model=D("Info");
            $model->create();//自动收集表单数据入库
            $model->Sex=$_POST["Sex"]=="男"?true:false;
            $r=$model->add();
            if($r)
            {
                $this->success("添加成功!","Tianjia",3);
            }
            else
            {
                $this->error("添加失败!","Tianjia",3);
            }
        }
    }
    //修改数据:
    function XiuGai($code)
    {
        $model=D("info");
        $modeln=D("nation");
        if(empty($_POST))
        {
            $attr=$model->find($code);
            $attrn=$modeln->select();
            
            $this->assign("shuju",$attr);
            $this->assign("shujun",$attrn);
            $this->display();
        }
        else
        {
            
            $model->create();
            $model->Sex=$_POST["Sex"]=="男"?true:false;
            $r=$model->save();
            if($r)
            {
                $this->success("修改成功",U("Showinfo"));    
            }
            else
            {
                $this->error("修改失败!");
            }
            
        }
    }
}

模板的数据显示:ShowInfo.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>主页面</title>
</head>

<body>
<h2>主页面</h2>
<table width="70%" cellpadding="0" cellspacing="0" border="1">
<tr>
<td>代号</td>
<td>姓名</td>
<td>性别</td>
<td>民族</td>
<td>生日</td>
<td>操作</td>
</tr>

<foreach name="shuju" item="v">
<tr>
<td><{$v.infocode}></td>
<td><{$v.infoname}></td>
<td><{$v["sex"]?"男":"女"}></td>
<td><{$v.nationname}></td>
<td><{$v.birthday}></td>
<td><a href="__CONTROLLER__/XiuGai/code/<{$v.infocode}>">修改</a>  <a href="__CONTROLLER__/ShanChu/code/<{$v.infocode}>">删除</a></td>
</tr>
</foreach>
</table>
<a href="__CONTROLLER__/TianJia">添加数据</a>
</body>
</html>

添加数据模板显示:Tianjia.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>添加数据</title>
</head>

<body>
<h1>添加数据</h1>
<form action="/index.php/Article/edit" method="post">
<p>代号:<input type="text" name="Code" /></p>
<p>姓名:<input type="text" name="Name" /></p>
<p>性别:<input type="radio" name="Sex" value="男" />男  
          <input type="radio" name="Sex" value="女" />女
</p>
<p>民族:
<select name="Nation">
<foreach name="shuju" item="v">
<option value="<{$v.code}>"><{$v.name}></option>
</foreach>
</select>
</p>
<p>生日:<input type="text" name="Birthday" /></p>
<input type="submit" value="添加" />
</form>
<a href="__CONTROLLER__/ShowInfo">返回主页面</a>
</body>
</html>

修改模板数据显示:Xiugai.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>修改数据</title>
</head>

<body>
<h1>修改数据</h1>
<form action="/index.php/Article/edit/code/<{$shuju.code}>" method="post">
<input type="hidden" name="Code" value="<{$shuju.code}>" />
<p>姓名:<input type="text" name="Name" value="<{$shuju.name}>"/></p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/learn/6657" title="ThinkPHP5.1企业站点快速开发-源码课件"><img
                                                                                src="https://img.php.cn/upload/webcode/000/000/164/5fe3efb458cfd510.png" alt="ThinkPHP5.1企业站点快速开发-源码课件" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/learn/6657" title="ThinkPHP5.1企业站点快速开发-源码课件">ThinkPHP5.1企业站点快速开发-源码课件</a>
                                                                        <p>ThinkPHP5.1企业站点快速开发</p>
                                                                </div>
                                                                <a href="/xiazai/learn/6657" title="ThinkPHP5.1企业站点快速开发-源码课件" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div>
<p>性别:<input type="radio" name="Sex" value="男" <{$shuju["sex"]?"checked='checked'":""}>/>男  
          <input type="radio" name="Sex" value="女" <{$shuju["sex"]?"":"checked='checked'"}> />女
</p>
<p>民族:
<select name="Nation">
<foreach name="shujun" item="v">
    <if condition="$shuju['nation']==$v['code']">
        <option selected="selected" value="<{$v.code}>"><{$v.name}></option>
     <else/>
         <option value="<{$v.code}>"><{$v.name}></option>
     </if>
</foreach>
</select>
</p>
<p>生日:<input type="text" name="Birthday" value="<{$shuju.birthday}>" /></p>
<input type="submit" value="修改" />
</form>
<a href="__CONTROLLER__/ShowInfo">返回主页面</a>
</body>
</html>

主页面:

QQ截图20170210165010.png

添加数据

904017-20160620125223647-1432877578.png

QQ截图20170210165114.png

修改数据:

904017-20160620125258928-815133898.png

904017-20160620125510725-690681060.png

删除数据:

QQ截图20170210165222.png

以上就是PHP中文网为大家带来的Thinkphp增删改查的基本方法和实例!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

60

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

40

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

20

2026.11.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

140

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

120

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

100

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

100

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

80

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

80

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn