本文由thinkphp框架教程欄目給大家介紹分析thinkorm新增加的虛擬模型功能,希望對需要的朋友有所幫助!
最新版本的ThinkORM增加了一個虛擬模型功能,這個功能早在ThinkPHP3.2版本中出現過,但新版的虛擬模型功能更為強大。
在之前,如果需要進行虛擬模型操作的話,模型類就不能繼承Model類,然后封裝自己的業務邏輯,雖然也能滿足部分需求,但無法實現獲取器、修改器以及模型關聯的功能,比如:
<?php namespace appmodel; class User { public function getInfo() { // 業務邏輯代碼 } }
新版著重強化了虛擬模型,數據只能保存在內存中,而且只能通過實例化的方式來創建數據,虛擬模型可以保留模型的大部分功能,包括獲取器、模型事件,甚至是關聯操作,另外一方面也更方便單元測試。
要使用虛擬模型,只需要在模型定義的時候引入Virtual trait,例如:
<?php namespace appmodel; use thinkModel; use thinkmodelconcernVirtual; 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視頻教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END