この記事の内容は、モデルをカスタマイズする方法に関するものです。 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='',$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 が定義され、将来のプロジェクトのモデルは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 による画像とファイルの一括ダウンロード コード例
のcurlでpostモードとgetモードのコードをリクエストします。以上がモデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス モデルの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。