ThinkORM新增虚拟模型功能,如何实现复杂业务逻辑的简化处理?

2026-04-18 12:022阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计825个文字,预计阅读时间需要4分钟。

ThinkORM新增虚拟模型功能,如何实现复杂业务逻辑的简化处理?

原文:本文由ThinkPHP框架+教程栏目为大家介绍分析ThinkORM新增的虚拟模型功能,希望对需要的朋友有所帮助!最新版本的ThinkORM新增了一个虚拟模型功能,这个功能在ThinkPHP3.2版本中就已经出现过了。

改写后:本文通过ThinkPHP框架与教程,为您解析ThinkORM新增的虚拟模型功能,期待为有需求的朋友提供帮助。最新版的ThinkORM引入了这一功能,它曾在ThinkPHP3.2版本中首次亮相。

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

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

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

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

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

ThinkORM新增虚拟模型功能,如何实现复杂业务逻辑的简化处理?

要使用虚拟模型,只需要在模型定义的时候引入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

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

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

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

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

标签:虚拟模型

本文共计825个文字,预计阅读时间需要4分钟。

ThinkORM新增虚拟模型功能,如何实现复杂业务逻辑的简化处理?

原文:本文由ThinkPHP框架+教程栏目为大家介绍分析ThinkORM新增的虚拟模型功能,希望对需要的朋友有所帮助!最新版本的ThinkORM新增了一个虚拟模型功能,这个功能在ThinkPHP3.2版本中就已经出现过了。

改写后:本文通过ThinkPHP框架与教程,为您解析ThinkORM新增的虚拟模型功能,期待为有需求的朋友提供帮助。最新版的ThinkORM引入了这一功能,它曾在ThinkPHP3.2版本中首次亮相。

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

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

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

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

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

ThinkORM新增虚拟模型功能,如何实现复杂业务逻辑的简化处理?

要使用虚拟模型,只需要在模型定义的时候引入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

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

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

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

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

标签:虚拟模型