一、使用模型更新數據
如果我們想更新數據,我們在前邊說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());
}