ホームページ  >  記事  >  バックエンド開発  >  モデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス モデルの使用法

モデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス モデルの使用法

不言
不言オリジナル
2018-08-06 10:04:222360ブラウズ

この記事の内容は、モデルをカスタマイズする方法に関するものです。 ThinkPHP3.2 のカスタム基本クラス Model の使い方は参考になりますので、困っている方は参考にしていただければ幸いです。

ThinkPHP は、他のモデルが継承するための Model クラスを提供します。 ModelクラスはMVCにおけるモデルクラスであり、永続化層を呼び出す上位クラスです。この記述には問題が多いように感じますが、どうすればよいでしょうか。ただし、このモデルではニーズの一部を満たせない場合があるため、モデル クラスをカスタマイズする必要があります。ただし、カスタマイズされたモデルは、TP によって提供されるモデル クラスも継承し、カスタマイズされたモデル クラスをプロジェクトのモデルとして使用する必要があります。クラス。早口言葉などの話をしているような気がするのはなぜだろう…少しめまいがする。

退屈な要件

Java オープン ソース プロジェクト JeeSite を使用するとき、私は create_by、create_date、update_by、update_date、remarks、および del_flag にいくつかのフィールドを追加する悪い習慣を身につけました。各テーブルにこれらのフィールドがある場合、各テーブルの挿入時に上記のフィールドが設定され、各テーブルの更新時に一部のフィールドが更新され、削除時に各レコードが削除されますが、実際にはdel_flagフィールドが設定されます。繰り返しの操作が多く、一部操作方法が変更されています。次に、この時点で、プロジェクトの基本クラスとして独自の Model をカスタマイズする必要があります。この Model は、上で説明したことを実行する役割を果たします。

モデルのカスタマイズ

モデルのカスタマイズ: モデルでは、TP が提供するモデルの追加、保存、削除、および選択メソッドを少なくとも再実装します。

定義コードは次のとおりです:

<?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 が定義され、将来のプロジェクトのモデルは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 は同じ名前空間にあるため、使用を省略しても問題ありません。

このように、D メソッドを使用して TrunkModel オブジェクトをインスタンス化した後、add メソッドを使用してデータを挿入するときに、BaseModel の add メソッドが最初に呼び出され、各テーブルに系列が含まれるようになります。 create_by などのフィールドは自動的に取得されます。

おすすめ関連記事:

thinkphp5 フレームワークと Android による QR コード生成コードの実装

Thinkphp による画像とファイルの一括ダウンロード コード例

php

のcurlでpostモードとgetモードのコードをリクエストします。

以上がモデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス モデルの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。