首页 > php框架 > ThinkPHP > 正文

分析ThinkORM新增加的虚拟模型功能

发布: 2021-08-06 09:27:29
转载
2591人浏览过

本文由thinkphp框架教程栏目给大家介绍分析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表,但仍然可以进行相关数据操作,下面是一些简单例子。

百度虚拟主播
百度虚拟主播

百度智能云平台的一站式、灵活化的虚拟主播直播解决方案

百度虚拟主播 36
查看详情 百度虚拟主播
// 创建数据
$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
登录后复制

注意,虚拟模型不支持自动时间戳功能(但仍然支持时间字段格式化),如果需要时间字段需要在实例化的时候传入。

如果有定义获取器、修改器及模型事件的话,仍然有效,大家有时间可以测试下。

相关推荐:最新的10个thinkphp视频教程

以上就是分析ThinkORM新增加的虚拟模型功能的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:thinkphp网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号