亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網
    最全最豐富的資訊網站

    分析ThinkORM新增加的虛擬模型功能

    本文由thinkphp框架教程欄目給大家介紹分析ThinkORM新增加的虛擬模型功能,希望對需要的朋友有所幫助!

    最新版本的ThinkORM增加了一個虛擬模型功能,這個功能早在ThinkPHP3.2版本中出現過,但新版的虛擬模型功能更為強大。

    在之前,如果需要進行虛擬模型操作的話,模型類就不能繼承Model類,然后封裝自己的業(yè)務邏輯,雖然也能滿足部分需求,但無法實現獲取器、修改器以及模型關聯(lián)的功能,比如:

    <?php namespace appmodel; class User {     public function getInfo()     {         // 業(yè)務邏輯代碼     } }

    新版著重強化了虛擬模型,數據只能保存在內存中,而且只能通過實例化的方式來創(chuàng)建數據,虛擬模型可以保留模型的大部分功能,包括獲取器、模型事件,甚至是關聯(lián)操作,另外一方面也更方便單元測試。

    要使用虛擬模型,只需要在模型定義的時候引入Virtual trait,例如:

    <?php namespace appmodel; use thinkModel; use thinkmodelconcernVirtual; class User extends Model {     use Virtual;     public function getInfo()     {         // 業(yè)務邏輯代碼     }     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表,但仍然可以進行相關數據操作,下面是一些簡單例子。

    // 創(chuàng)建數據 $data = [     'id'      =>    8,     'name'    =>    'Think',     'status'  =>    1, ]; $user = User::create($data); // 獲取數據 (支持獲取器) echo $user->name; // 輸出 think // 修改數據 (支持修改器) $user->name = 'ThinkPHP'; // 實際數據變成 thinkphp // 保存數據到內存 并且調用模型事件 $user->save(); // 獲取關聯(lián)博客數據 $blog = $user->blog()->limit(3)->select(); // 刪除數據(同時刪除關聯(lián)博客數據) $user->together(['blog'])->delete();

    由于虛擬模型沒有實際的數據表,所以你不能進行任何的查詢操作,下面的代碼就會拋出異常:

    User::find(1); // 會拋出下面的異常 // virtual model not support db query

    注意,虛擬模型不支持自動時間戳功能(但仍然支持時間字段格式化),如果需要時間字段需要在實例化的時候傳入。

    如果有定義獲取器、修改器及模型事件的話,仍然有效,大家有時間可以測試下。

    贊(0)
    分享到: 更多 (0)
    網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號