• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 分析ThinkORM新增加的虚拟模型功能

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了ThinkORM,虚拟模型功能等相关知识,希望对您有所帮助

本文给大家介绍分析ThinkORM新增加的虚拟模型功能,希望对需要的朋友有所帮助!

最新版本的ThinkORM增加了一个虚拟模型功能,这个功能早在ThinkPHP3.2版本中出现过,但新版的虚拟模型功能更为强大。

在之前,如果需要进行虚拟模型操作的话,模型类就不能继承Model类,然后封装自己的业务逻辑,虽然也能满足部分需求,但无法实现获取器、修改器以及模型关联的功能,比如:

<?phpnamespace app\model;class User{    public function getInfo()    {        // 业务逻辑代码    }}

新版着重强化了虚拟模型,数据只能保存在内存中,而且只能通过实例化的方式来创建数据,虚拟模型可以保留模型的大部分功能,包括获取器、模型事件,甚至是关联操作,另外一方面也更方便单元测试。

要使用虚拟模型,只需要在模型定义的时候引入Virtual trait,例如:

<?phpnamespace 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

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

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分析ThinkORM新增加的虚拟模型功能
  • 关于最新版ThinkORM对于时间字段的调整

相关文章

  • 2022-04-29Javascript怎么实现红绿灯
  • 2022-04-29详解mysql double master的配置方法
  • 2022-04-29VUE项目地址去掉 # 号的方法
  • 2022-04-29浅谈css grid比Bootstrap更适合创建布局的原因
  • 2022-04-29Phpcms和DedeCMS程序比较分析
  • 2022-04-29怎样利用Javascript简单实现星空连线的效果
  • 2022-04-29关键词组合的SEO优化策略
  • 2022-04-29Photoshop设计时尚大气的3D螺旋球
  • 2022-04-29Thinkphp volist多重循环原样输出数组key值
  • 2022-04-29浅析vue中的生命周期钩子mounted

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • ThinkPHP6中env环境变量的使用
    • 教你用PHP开发微信公众号文章付费阅读功能
    • Photoshop制作可爱风格的糖果艺术字
    • 掌握PHP中对数组进行排序的正确姿势
    • Photoshop绘制时尚大气的播放界面
    • renderjs有什么用?聊聊uniapp中用renderjs的一些细节
    • Photoshop制作炫彩效果的霓虹字教程
    • 分享实现PHP红包算法的思路(附开发代码)
    • 如何区别友情链接的内页和首页链接
    • Photoshop制作金属质感的艺术字教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有