《TP5.0学习笔记---模型篇(二)》

本文详细介绍了ThinkPHP框架中如何使用模型来进行数据的更新、删除、聚合操作及获取器的应用。包括不同方式更新数据、多种删除方法、获取数据统计信息以及自定义数据展示格式等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用模型更新数据
如果我们想更新数据,我们在前边说Db类的时候我们知道,我们需要一些where条件,我直接用代码演示:

public function index()
    {
       $res = User::update([//通过Model的update()方法,传递一个数组进行数据更新
            'username'  => '3404767031'
       ], ['id'=>80]);//表示更新id=80的这条记录的username
       dump($res);
    }

这里写图片描述
第二个参数,还可以支持一个闭包函数,和之前说的一样:

 public function index()
    {
       $res = User::update([//通过Model的update()方法,传递一个数组进行数据更新
            'username'  => 'test'
       ], function($query){
            $query->where("id", "<", 85);
       });//表示更新id<85的这几条记录的username
       dump($res);
       //当然可以直接通过我们之前说的那种,链式操作的方式来构造where条件:User::where()->update();

这里写图片描述
其实,我们还有一种更新数据的方法,那就是,现获取到某条记录,然后再对记录中的字段进行修改:

$userModel = User::get(80);
        $userModel->username = 'shulv_80';
        $res = $userModel->save();
       dump($res);

这里写图片描述
我们还可以通过saveAll()的方法进行批量更新数据

$userModel = new User;
        $res = $userModel->saveAll([
            ['id'=>88, 'username' => 'hhhhhh'],
            ['id'=>89, 'username' => 'tttttt']
        ]);
       dump($res);

这里写图片描述
二、使用模型删除数据

//Model类为我们提供了destory()静态方法来删除数据
        $res = User::destroy(79);//如果表中存在主键,我们可以直接传递主键进行删除 
        dump($res); 

这里写图片描述

//Model类为我们提供了destory()静态方法来删除数据
        // $res = User::destroy(79);//如果表中存在主键,我们可以直接传递主键进行删除 
        // dump($res);  
        $res = User::destroy(['id'=>80]);//也可以通过传递数组的方式

        $res = User::destroy(function($query){
            $query->where("id", "<", 85);
        });//还可以通过闭包函数的方式

        //通过先获取到执行的记录,然后进行删除
        $userModel = User::get(90);
        $res = $userModel->delete();

        //添加where条件进行删除
        $res = User::where("id", "=", 91)->delete();//返回值是删除的记录数
        //删除所有数据  $res = User::where("1=1")->delete();
        dump($res);

三、模型聚合操作
在thinkphp的model中为我们提供了很方便获取平均值、最大值、最小值、数据条数的方法。下边就用代码演示这些函数的用法:

 $res1 = User::count();//获取总记录数
        dump($res1);
        $res2 = User::where("id", ">", 90)//获取id>90的记录数
             ->count();
        dump($res2);

        $res3 = User::max('num');//获取num字段中的最大值
        dump($res3);

        $res4 = User::where("id", ">", 90)//获取id>90的记录中num值最大的那个记录
             ->max('num');
        dump($res4);

        //其余的还有sum(),avg()等方法的使用都是这样,就不一一写了

这里写图片描述
四、模型获取器
在我们的实际应用中,我们经常会存在这样的场景,比如说我们存用户的性别,我们可能在数据库中只使用0,1,20或1,2,3的方式来存用户的性别。0:男1:女2:未知。我们在数据库中存的是0,1,2而我们在页面中展示的是男女和未知,那么在获取这个数据的过程中,我们就使用获取器,可以自动的将我们的数据转化成我们想要的显示格式

app/index/model/User.php
<?php
namespace app\index\model;
use think\Model;

class User extends Model{
    public function getSexAttr($val){//注意这个方法名的写法是固定的
        //dump($val);//我们在这里先直接打印这个$val,可以看到输出的是int(0),也就是说我们能直接获取到我们当前获取的数据的value值,那么我们就可以对其进行判断
        switch ($val) {
            case '1':
                return "男";
                break;
            case '2':
                return "女";
                break;
            default:
                return "未知";
                break;
        }
    }//写完这个函数之后,刚才输出的0,现在就会输出  未知
app/index/controller/Index.php

<?php
namespace app\index\controller;

use think\Controller;
use app\index\model\User;//使用我们刚刚新建的那个模型
//use think\Loader;//通过引入think下的Loader类
class Index extends Controller
{
    public function index()
    {
       //首先我们先看一下怎么常规的获取到一条记录的sex字段值
       $res = User::get(80);
       echo $res->sex;
       //那么现在我们如果想让0:未知 1:男 2:女    那么这个时候我们需要在模型中编写一个函数

       dump($res->toArray());//此时会打印出id=80的这条记录,我们会发现sex显示的是 未知
       //那么,如果我们想获取到原始数据,可以使用getData()
       dump($res->getData());
    }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值