[TOC]
# 說明
模型內置的查詢和事務支持已經非常強大,而且完全可以使用數據庫的查詢構造器,也就是說`Db`類的所有功能模型都有,而且模型還提供了諸如自動時間戳、獲取器、修改器、搜索器、模型關聯及模型事件等功能,而且對象化操作的優勢明顯。
模型和數據表是一一對應的,一個模型對象對應一個數據表,而一個模型對象實例則對應數據表的一行數據。
以上解釋是由TP官方文檔復制而來,所以這里并不會過多去說明模型是什么以及模型的基礎用法,官方文檔中本來就有的,這里也不會去重復說明。
TP6模型主要支持功能列表:
[定義](http://www.hmoore.net/manual/thinkphp6_0/1037580)
[模型字段](http://www.hmoore.net/manual/thinkphp6_0/1037581)
[新增](http://www.hmoore.net/manual/thinkphp6_0/1037582)
[更新](http://www.hmoore.net/manual/thinkphp6_0/1037583)
[刪除](http://www.hmoore.net/manual/thinkphp6_0/1037584)
[查詢](http://www.hmoore.net/manual/thinkphp6_0/1037585)
[查詢范圍](http://www.hmoore.net/manual/thinkphp6_0/1037586)
[JSON字段](http://www.hmoore.net/manual/thinkphp6_0/1037587)
[獲取器](http://www.hmoore.net/manual/thinkphp6_0/1037588)
[修改器](http://www.hmoore.net/manual/thinkphp6_0/1037589)
[搜索器](http://www.hmoore.net/manual/thinkphp6_0/1037590)
[數據集](http://www.hmoore.net/manual/thinkphp6_0/1037591)
[自動時間戳](http://www.hmoore.net/manual/thinkphp6_0/1037592)
[只讀字段](http://www.hmoore.net/manual/thinkphp6_0/1037593)
[軟刪除](http://www.hmoore.net/manual/thinkphp6_0/1037594)
[類型轉換](http://www.hmoore.net/manual/thinkphp6_0/1037595)
[模型輸出](http://www.hmoore.net/manual/thinkphp6_0/1037597)
[模型事件](http://www.hmoore.net/manual/thinkphp6_0/1037598)
[模型關聯](http://www.hmoore.net/manual/thinkphp6_0/1037599)
系統既然是基于TP6進行開發,所以官方中的說明、功能、使用方式都支持。即使系統有些地方有些個性化處理,但都是基于TP6本身而來的。
# 創建
## 繼承關系

模型最終都是繼承自`think\Model`,這就完全符合了TP6框架本身的要求。
具體模型也都繼承到了`woo\common\Model`,因此woo提供的封裝方法,你也都可以使用。
`app\common\model\App`你可以找到該文件,里面是空的。這個文件是用于**開發者定義自己的一些公共模型方法**的。
模型都建議放置到`app\commom\model`中,當然你可以定義到其他應用中,都建議按上面的繼承關系來,你自定義的模型類都繼承到`app\common\model\App`。
模型你可以使用系統后臺系統的自動創建([如何使用系統的自動創建](http://www.hmoore.net/laowu199/e_dev/1957925)?),它會自行識別判斷繼承關系,也可以自行用其他方式創建(應該很少吧?哈哈哈)。
這里就不復制一個模型代碼出來了,你自行在`app\common\model`下找模型看下。
使用系統自動創建的模型文件會在每次后臺操作該模型數據或模型字段的時候自動生成覆蓋,因此**不要直接在該文件中寫自定義代碼**(除非開發完成以后,可以確保該模型文件不會被重新生成,否則你的代碼會很容易被覆蓋而丟失掉),需要改變里面的代碼都需要后臺操作來自動重新生成。
可以將“/config/woo.php”配置文件下的`is_model_backup`配置項設置為true,每次生成會備份原文件,防止代碼完全丟失。由于開發的時候生成比較頻繁,系統默認不會備份。
每個模型都會有一個trait文件專門用于寫自定義代碼的,該文件只會第一次生成,后期不會重新生成被覆蓋。
`afterStart`方法中可以獲取到所有初始屬性數據,在這里面實現數據的一些自定義操作。
也可以在該文件定義該模型的一些方法,便于其他地方調用。
## 模型屬性
### `$relationLink`:用于定義模型關系(woo)
public array
~~~
public $relationLink = [
'AdminGroup' => [
'type' => 'belongsTo',
],
'Department' => [
'type' => 'belongsTo',
],
'AdminLogin' => [
'type' => 'hasMany',
],
];
~~~
詳細介紹,可以看下后面的“關聯”章節
*****
### `$form`:用于定義字段的表單、列表、搜索、選項等屬性(woo)
public array
~~~
public $form = [
'id' => [
'type' => 'integer',
'name' => 'ID',
'elem' => 'hidden',
],
'username' => [
'type' => 'string',
'name' => '用戶名',
'elem' => 'text',
'list' => [
'minWidth' => '100',
],
'list_filter' => true,
],
]
~~~
form屬性名可能容易造成歧義(繼承了老版的習慣,命名為form),它叫fieldsList可能更加形象;新版中它其實保存了每個字段的詳細信息。
*****
### `$formGroup`:用于定義模型表單分組(woo)
public array
~~~
public $formGroup = [
'basic' => '基本信息',// 必須有basic
'gaoji' => '高級選項',
'else' => '其他設置',
]
~~~
*****
### `$formTrigger`:定義模型表單觸發器(woo)
public array
~~~
public $formTrigger = [
'title' => [
'a' => 'aa|bb',
'b' => 'aa|cc|dd',
],
];
~~~
表示當title字段的值為a時,才顯示aa、bb2個字段;當title字段的值為b時,才消失aa、cc、dd3個字段
### `tableTab`:定義模型表格列表的相關屬性(woo)
public array
使用Table構建器的時候,可以自動獲取該屬性來識別列表列表tab、字段、按鈕、搜索、側邊欄等
~~~
public $tableTab = [
// tab名,必須有一個basic
'basic' => [
'title' => '全部數據',//tab名
//'model' => '',當前Tab對應數據的模型名,默認為當前模型
'url' => '',//數據接口地址 默認當前url
// 當前Tab需要顯示的字段 不設置自動從form屬性list屬性識別
'list_fields' => [
'title',
'is_verify',
'image',
'create_time'
],
//'list_filters' => 當前Tab的搜索規則 不設置自動從form屬性list_filter鍵識別
//'tool_bar' => 列表toolBar按鈕定義 自定義頭部按鈕 系統會自動設置新增等操作
//'item_tool_bar' => 列表項目toolBar按鈕定義 系統會自動設置修改、刪除等操作
// 'siderbar' => ['foreign' => 'Demo'] 列表指定一個 側邊欄模型 模型對應關聯字段建議不要是list_filters中得字段,會搜索沖突
// 'checkbox' => 列表復選框操作 checkbox 默認 復選框、 radio 單選框、false 不顯示
// 'table' => [] 自定義更多表格的基本參數
// ...
],
'test' => [
'title' => 'Tab名'
]
];
~~~
### `$parentModel`:定義模型的父模型名(woo)
public string
### `$cname`:定義模型的中文名(woo)
public string
### `$display`:定義模型的主顯字段名(woo)
public string
默認是主鍵字段名,比如文章,主顯字段一般是標題
### `$orderType`:定義模型的默認排序方式(woo)
public string [DESC|ASC]
有點表希望默認倒序,有點表希望默認正序;通過它來定義
### `$error`:保存錯誤信息(woo)
protected array
### 時間戳
~~~
protected $autoWriteTimestamp = 'int';
~~~
系統默認已經開啟了時間戳功能,而且類型是`int`類型;所有你數據表中時間戳字段名都應該是`int`型。

你在創建模型的時候,需要哪些時間戳功能,勾選上對應字段,自動識別開啟;無需你做其他事情。
#### `$createTime` 創建時間(TP)
~~~
protected $createTime = false;
~~~
默認關閉
如果你的form屬性中含有`create_time`字段,系統會自動幫你開啟
#### `$updateTime` 最后修改時間(TP)
~~~
protected $updateTime = false;
~~~
默認關閉
如果你的form屬性中含有`update_time`字段,系統會自動幫你開啟
#### `$deleteime` 軟刪除,刪除時間(TP)
~~~
protected $deleteTime = false;
~~~
默認關閉
如果你的form屬性中含有`delete_time`字段,系統會自動幫你開啟;刪除的時候自動就是軟刪除
### `$customData ` 自定義模型數據(woo)
public array
~~~
public $customData = [];
~~~
### `$isForceDelete` 是否是真刪除(woo)
protected boolean
在刪除的模型事件中,通過該屬性判斷當前操作是真刪除,還是軟刪除。
### `$treeLevel` 無限級模型中 記錄最多允許的級數(woo)
protected int
~~~
protected $treeLevel = 0;
~~~
### `$validate` 模型自動驗證規則(woo)
~~~
$this->validate = [
'username' => [
[
'rule' => ['require'],
],
[
'rule' => ['unique', 'admin'],
],
],
'password' => [
[
'rule' => ['require'],
'on' => 'add',
],
[
'rule' => ['length', '6,16'],
],
],
];
~~~
### TP框架自有屬性
#### `$pk` 主鍵字段
~~~
protected $pk = 'id';
~~~
也強烈建議使用默認的主鍵字段名`id`
#### `$table` 設置當前模型對應的完整數據表名稱
#### `$connection` 設置當前模型的數據庫連接
#### 了解更多
| 屬性 | 描述 |
| --- | --- |
| name | 模型名(相當于不帶數據表前后綴的表名,默認為當前模型類名) |
| table | 數據表名(默認自動獲取) |
| suffix | 數據表后綴(默認為空) |
| pk | 主鍵名(默認為`id`) |
| connection | 數據庫連接(默認讀取數據庫配置) |
| query | 模型使用的查詢類名稱 |
| field | 模型允許寫入的字段列表(數組) |
| schema | 模型對應數據表字段及類型 |
| type | 模型需要自動轉換的字段及類型 |
| strict | 是否嚴格區分字段大小寫(默認為true) |
| disuse | 數據表廢棄字段(數組) |
更多子類,自行[查看TP文檔](http://www.hmoore.net/manual/thinkphp6_0/1037580)
- 2.0開發手冊
- 基礎
- 簡介
- 安裝
- 目錄
- 規范(必看)
- 快速開發
- 創建模型
- 字段管理
- 無限級開發
- 模型Model
- 定義
- 方法
- 事件
- 關聯
- 關聯查詢
- 驗證
- 后臺控制器Controller
- 定義
- 列表【index】
- 新增【create】
- 修改【modify】
- 刪除【delete】
- 詳細【detail】
- 文本審核【antispam】
- 清空數據【clearData】
- 自定義頁面
- 視圖View
- 視圖使用
- 引入CSS和JS
- 基礎表單構建Form
- 布局表單構建FormPage
- 表單構建器的基礎使用
- 表單項
- 表單分組
- 表單觸發器
- 表單布局
- 數據提交驗證和入庫
- 集成tinymce編輯器
- 集成nkeditor編輯器
- 表格構建Table
- 表格構建器基礎使用
- 表格構建器列表字段相關
- 自定義列表頭部工具按鈕
- 自定義列表項工具按鈕
- 自定義搜索
- 定義列表側邊欄
- 靜態數據
- 更多屬性和回調
- 自定義模板V2.1.0
- 列表統計輸出V2.1.2
- 常見問題
- 自定義應用
- 創建新應用
- 應用開發
- API應用
- 自定義插件
- 創建新插件
- 雜項
- 認證Auth
- 權限管理
- 上傳Upload
- 批量導入
- 助手庫
- 系統配置
- 字典
- 二維碼生成
- 源碼修改
- 常見問題
- 小技巧,小細節
- 插件
- oauth
- APP一鍵登錄
- 微信小程序登錄
- 2.0CMS建站
- 基礎
- 安裝
- 建站
- Callback
- 引入CSS和JS
- 模板
- 欄目數據
- 列表頁數據
- 詳細頁數據
- 欄目封面
- 自定義表單
- 其他數據和自定義數據
- wap視圖層
- 前臺搜索
- API開發
- CMS應用日志
- CMS升級指導
- 中臺-SAAS開發
- 安裝
- 中臺日志
- 中臺升級指導
- ★★2.0視頻教程★★
- 附錄
- Admin核心更新日志
- Admin核心升級指導
- composer
- 安全