本篇内容介绍了“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新增加的虚拟模型功能有什么作用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。