亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkORM新增加的虛擬模型功能有什么作用

發布時間:2021-08-06 10:47:43 來源:億速云 閱讀:135 作者:chen 欄目:編程語言

本篇內容介紹了“ThinkORM新增加的虛擬模型功能有什么作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

最新版本的ThinkORM增加了一個虛擬模型功能,這個功能早在ThinkPHP3.2版本中出現過,但新版的虛擬模型功能更為強大。

在之前,如果需要進行虛擬模型操作的話,模型類就不能繼承Model類,然后封裝自己的業務邏輯,雖然也能滿足部分需求,但無法實現獲取器、修改器以及模型關聯的功能,比如:

<?php
namespace app\model;
class User
{
    public function getInfo()
    {
        // 業務邏輯代碼
    }
}

新版著重強化了虛擬模型,數據只能保存在內存中,而且只能通過實例化的方式來創建數據,虛擬模型可以保留模型的大部分功能,包括獲取器、模型事件,甚至是關聯操作,另外一方面也更方便單元測試。

要使用虛擬模型,只需要在模型定義的時候引入Virtual trait,例如:

<?php
namespace app\model;
use think\Model;
use think\model\concern\Virtual;
class User extends Model
{
    use Virtual;
    public function getInfo()
    {
        // 業務邏輯代碼
    }
    public function getStatusAttr($value)
    {
        $status = [-1=>'刪除',0=>'禁用',1=>'正常',2=>'待審核'];
        return $status[$value];
    }
    public function setNameAttr($value)
    {
        return strtolower($value);
    }
    public function blog()
    {
        return $this->hasMany('Blog');
    }
}

你不需要在數據庫中存在有對應的user表,但仍然可以進行相關數據操作,下面是一些簡單例子。

// 創建數據
$data = [
    'id'      =>    8,
    'name'    =>    'Think',
    'status'  =>    1,
];
$user = User::create($data);
// 獲取數據 (支持獲取器)
echo $user->name; // 輸出 think
// 修改數據 (支持修改器)
$user->name = 'ThinkPHP'; // 實際數據變成 thinkphp
// 保存數據到內存 并且調用模型事件
$user->save();
// 獲取關聯博客數據
$blog = $user->blog()->limit(3)->select();
// 刪除數據(同時刪除關聯博客數據)
$user->together(['blog'])->delete();

由于虛擬模型沒有實際的數據表,所以你不能進行任何的查詢操作,下面的代碼就會拋出異常:

User::find(1);
// 會拋出下面的異常
// virtual model not support db query

注意,虛擬模型不支持自動時間戳功能(但仍然支持時間字段格式化),如果需要時間字段需要在實例化的時候傳入。

如果有定義獲取器、修改器及模型事件的話,仍然有效,大家有時間可以測試下。

“ThinkORM新增加的虛擬模型功能有什么作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南通市| 阿坝| 田林县| 鹤山市| 民勤县| 夏津县| 华容县| 永德县| 涞源县| 南康市| 深水埗区| 察雅县| 陆河县| 固阳县| 遵义县| 绥滨县| 博罗县| 廊坊市| 成武县| 玉门市| 临西县| 武汉市| 新龙县| 天全县| 昌江| 房山区| 南汇区| 辉县市| 隆回县| 恩平市| 建德市| 吉林省| 陆良县| 建瓯市| 大安市| 柳林县| 宁国市| 尚义县| 金川县| 芮城县| 南部县|