一、使用模型更新数据
如果我们想更新数据,我们在前边说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());
}