ThinkPHP 提供了一個 Model 類,供其他的 Model 進行繼承。Model 類中是 MVC 中的模型類,它是調用 持久層 的上層類。感覺這么描述問題很多,但是有什么辦法呢?但是,這個 Model 有時無法滿足我們的一些需求,因此我們需要自定義一個 Model 類出來,不過自定義的 Model 同樣要繼承 TP 提供的 Model 類,而把我們自定義的 Model 類作為我們項目中的 Model 基類。我怎么感覺我在說繞口令,等等...我有點暈。
無聊的需求
在使用 Java 的開源項目 JeeSite 時,養成了一個不好的習慣,習慣給每張表都增加 create_by、create_date、update_by、update_date、remarks 和 del_flag 這么幾個字段。如果每張表都有這幾個字段,那么對每張表進行 insert 時都會對以上的字段進行設置,對每張表進行 update 時都會對其中部分字段進行更新,對每條記錄進行 delete 時都其實是對 del_flag 字段進行 置位。重復操作很多,一些操作方法被修改。那么,這個時候就要自定義一個自己的 Model 來作為項目的 基類 了,這個 Model 就負責干上面我說的那些事情了。
自定義一個 Model
自定義一個 Model,Model 中至少重新 TP 提供的 Model 中的 add、save、delete 和 select 方法。
定義代碼如下:
?phpnamespace Admin/Model;use Think/Model; * 項目中其他 Model 類的基類 * 該類繼承自 TP 提供的基類 Modelhtml' target='_blank'>class BaseModel extends Model { * 繼承基類 Model 的 add 方法 * 自動插入 id create_by create_date update_by update_date del_flag public function add($data= ,$options=array(),$replace=false) { $data[ id ] = $this- getUuid(); $data[ create_by ] = $data[ create_date ] = date( Y-m-d H:i:s $data[ update_by ] = $data[ update_date ] = date( Y-m-d H:i:s $data[ del_flag ] = 0 return parent::add($data, $options, $replace); * 獲得 未刪除 的所有數據 * 記錄是否被刪除通過 del_flag 字段來進行確定 public function select($options=array()) { $map[ del_flag ] = 0; $this- where($map); return parent::select($options); * 獲取 全部 的所有數據 public function selectAll($options=array()) { return parent::select($options); * 更新數據 * 更新數據時,要更新 update_by update_date 兩個字段 public function save($data= ,$options=array()) { $data[ update_by ] = $data[ update_date ] = date( Y-m-d H:i:s return parent::save($data, $options); * 刪除也是更新 * 設置 刪除 標志位即可 public function delete($data= ,$options=array()) { $data[ del_flag ] = 1; return parent::save($data, $options); }
這樣,我們的 BaseModel 就定義好了,以后項目中的 Model 就不再繼承 TP 的 Model 類了,而是繼承我們自定義的 BaseModel 了。
繼承我們定義的基類
繼承的 BaseModel 的方法和繼承 Model 的方法是一樣的,只是使用 use 引入命名空間到當前作用域時的需要修改為我們的命名空間,而不是再去使用 TP 提供的命名空間。代碼如下:
1 ?php2 namespace Admin/Model;3 use Admin/Model/BaseModel;5 class TrunkModel extends BaseModel {
use 引入的命名空間是 Admin/Model/BaseModel ,因為我們定義的 BaseModel 的命名空間是 Admin/Model,因為這里的 TrunkModel 和 BaseModel 在一個命名空間下,省去 use 也是可以的。
這樣,在我們用 D 方法實例化 TrunkModel 的對象后,使用 add 方法插入數據時,就會先調用 BaseModel 中的 add 方法了,這樣我們每張表都有的 create_by 等一系列字段就都會自動得到了。
相關文章推薦:
thinkphp5框架與Android實現二維碼的生成代碼
Thinkphp批量下載圖片和文件件的代碼實例
php的curl中post方式和get方式的請求代碼
以上就是如何自定義一個Model?ThinkPHP3.2自定義基類Model的用法的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答