本文由thinkphp框架教程栏目给大家介绍分析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

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

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


更多相关文章

  1. php 变量 常量 数据类型
  2. 【前端】es6的const定义的常量不能更改该怎么理解?
  3. js语法:数据类型、函数,作用域/作用域链、闭包
  4. 八大数据类型
  5. PHP基础:变量和数据类型
  6. PHP数据类型及开发环境部署
  7. 初始 php 及认识 php 变量与数据类型
  8. 使用php数组遍历及模拟数据制作一个省级、市级、区县信息详情表
  9. PHP第一课 变量命名、数据类型

随机推荐

  1. AndroidStudio 2.3.3 百度云盘地址
  2. android 2.2 获取联系人,电话,并拨号
  3. cocos2d-x-2.1.4在NDK r9下的编译问题
  4. Android(安卓)获取控件相对于屏幕位置
  5. 【翻译】(7)CPU Arch ABIs
  6. Android(安卓)截取屏幕
  7. Android底部导航栏实现(三)之TextView+Line
  8. Android状态栏提醒(Notification,Notific
  9. android之基本命令
  10. 史上最全!最经典!最无私的Android资料(书籍+