《TP5.0學習筆記---模型篇(二)》

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

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章