首頁 >後端開發 >php教程 >如何自訂一個Model? ThinkPHP3.2自訂基底類別Model的用法

如何自訂一個Model? ThinkPHP3.2自訂基底類別Model的用法

不言
不言原創
2018-08-06 10:04:222392瀏覽

本篇文章帶給大家的內容是關於如何自訂一個Model? ThinkPHP3.2自訂基底類別Model的用法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

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 方法。

定義程式碼如下:

<?php
namespace Admin\Model;
use Think\Model;

/**
 * 项目中其他 Model 类的基类
 * 该类继承自 TP 提供的基类 Model
 */
class BaseModel extends Model {
    
    /**
     * 继承基类 Model 的 add 方法
     * 自动插入 id create_by create_date update_by update_date del_flag
     */
    public function add($data=&#39;&#39;,$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"]    = &#39;0&#39;;
        
        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=&#39;&#39;,$options=array()) {
        $data["update_by"]   = "";
        $data["update_date"] = date("Y-m-d H:i:s");
        
        return parent::save($data, $options);
    }
    
    /**
     * 删除也是更新
     * 设置 删除 标志位即可
     */
    public function delete($data=&#39;&#39;,$options=array()) {
        $data["del_flag"] = 1;
        
        return parent::save($data, $options);
    }

#這樣,我們的BaseModel 就定義好了,以後專案中的Model 就不再繼承TP 的Model 類別了,而是繼承我們自訂的BaseModel 了。

繼承我們定義的基底類別

繼承的BaseModel 的方法和繼承Model 的方法是一樣的,只是使用use 引入命名空間到目前作用域時的需要修改為我們的命名空間,而不是再去使用TP 提供的命名空間。程式碼如下:

1 <?php
2 namespace Admin\Model;
3 use Admin\Model\BaseModel;
4 
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn