## 模型定義
為了更好的理解,我們首先在數據庫創建一個`think_user`表如下:
```
<pre class="calibre18">
```
<span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`think_user`</span>(
<span class="hljs-string">`id`</span> <span class="hljs-number">int</span>(<span class="hljs-number">8</span>) <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`nickname`</span> <span class="hljs-number">varchar</span>(<span class="hljs-number">50</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'昵稱'</span>,
<span class="hljs-string">`email`</span> <span class="hljs-number">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-number">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'郵箱'</span>,
<span class="hljs-string">`birthday`</span> <span class="hljs-number">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'生日'</span>,
<span class="hljs-string">`status`</span> tinyint(<span class="hljs-number">2</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'狀態'</span>,
<span class="hljs-string">`create_time`</span> <span class="hljs-number">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'注冊時間'</span>,
<span class="hljs-string">`update_time`</span> <span class="hljs-number">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">UNSIGNED</span> <span class="hljs-keyword">NOT</span> <span class="hljs-number">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span> <span class="hljs-keyword">COMMENT</span> <span class="hljs-string">'更新時間'</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
) <span class="hljs-keyword">ENGINE</span>=MyISAM <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8 ;</span>
```
```
數據庫配置文件定義如下:
```
<pre class="calibre18">
```
<span class="hljs-keyword">return</span> [
<span class="hljs-comment">// 數據庫類型</span><span class="hljs-string">'type'</span> => <span class="hljs-string">'mysql'</span>,
<span class="hljs-comment">// 服務器地址</span><span class="hljs-string">'hostname'</span> => <span class="hljs-string">'127.0.0.1'</span>,
<span class="hljs-comment">// 數據庫名</span><span class="hljs-string">'database'</span> => <span class="hljs-string">'demo'</span>,
<span class="hljs-comment">// 數據庫用戶名</span><span class="hljs-string">'username'</span> => <span class="hljs-string">'root'</span>,
<span class="hljs-comment">// 數據庫密碼</span><span class="hljs-string">'password'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// 數據庫連接端口</span><span class="hljs-string">'hostport'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// 數據庫連接參數</span><span class="hljs-string">'params'</span> => [],
<span class="hljs-comment">// 數據庫編碼默認采用utf8</span><span class="hljs-string">'charset'</span> => <span class="hljs-string">'utf8'</span>,
<span class="hljs-comment">// 數據庫表前綴</span><span class="hljs-string">'prefix'</span> => <span class="hljs-string">'think_'</span>,
<span class="hljs-comment">// 數據庫調試模式</span><span class="hljs-string">'debug'</span> => <span class="hljs-keyword">true</span>,
];
```
```
并添加路由定義(`application/route.php`)如下:
```
<pre class="calibre18">
```
<span class="hljs-keyword">return</span> [
<span class="hljs-comment">// 全局變量規則定義</span><span class="hljs-string">'__pattern__'</span> => [
<span class="hljs-string">'id'</span> => <span class="hljs-string">'\d+'</span>,
],
<span class="hljs-string">'user/index'</span> => <span class="hljs-string">'index/user/index'</span>,
<span class="hljs-string">'user/create'</span> => <span class="hljs-string">'index/user/create'</span>,
<span class="hljs-string">'user/add'</span> => <span class="hljs-string">'index/user/add'</span>,
<span class="hljs-string">'user/add_list'</span> => <span class="hljs-string">'index/user/addList'</span>,
<span class="hljs-string">'user/update/:id'</span> => <span class="hljs-string">'index/user/update'</span>,
<span class="hljs-string">'user/delete/:id'</span> => <span class="hljs-string">'index/user/delete'</span>,
<span class="hljs-string">'user/:id'</span> => <span class="hljs-string">'index/user/read'</span>,
];
```
```
我們為`think_user`表定義一個`User`模型(位于`application/index/model/User.php`)如下:
```
<pre class="calibre18">
```
namespace app\index\model;
use think\<span class="hljs-operator">Model</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Model</span></span>{
}
```
```
大多情況下,我們無需為模型定義任何的屬性和方法即可完成基礎的操作。
## 設置數據表
模型會自動對應一個數據表,規范是:
> ### 數據庫前綴+當前的模型類名(不含命名空間)
因為模型類命名是駝峰法,所以獲取實際的數據表的時候會自動轉換為小寫+下劃線命名的數據表名稱。
如果你的模型命名不符合這一數據表對應規范,可以給當前模型定義單獨的數據表,包括兩種方式。
### 設置完整數據表:
```
<pre class="calibre18">
```
namespace app\index\model;
use think\<span class="hljs-operator">Model</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Model</span></span>{
<span class="hljs-comment">// 設置完整的數據表(包含前綴)</span><span class="hljs-keyword">protected</span> $table = <span class="hljs-operator">'think_use</span>r';
}
```
```
### 設置不帶前綴的數據表名:
```
<pre class="calibre18">
```
namespace app\index\model;
use think\<span class="hljs-operator">Model</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Model</span></span>{
<span class="hljs-comment">// 設置數據表(不含前綴)</span><span class="hljs-keyword">protected</span> $name = <span class="hljs-operator">'membe</span>r';
}
```
```
## 設置數據庫連接
如果當前模型類需要使用不同的數據庫連接,可以定義模型的`connection`屬性,例如:
```
<pre class="calibre18">
```
<span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Model</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span></span>{
<span class="hljs-comment">// 設置單獨的數據庫連接</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$connection</span> = [
<span class="hljs-comment">// 數據庫類型</span><span class="hljs-string">'type'</span> => <span class="hljs-string">'mysql'</span>,
<span class="hljs-comment">// 服務器地址</span><span class="hljs-string">'hostname'</span> => <span class="hljs-string">'127.0.0.1'</span>,
<span class="hljs-comment">// 數據庫名</span><span class="hljs-string">'database'</span> => <span class="hljs-string">'test'</span>,
<span class="hljs-comment">// 數據庫用戶名</span><span class="hljs-string">'username'</span> => <span class="hljs-string">'root'</span>,
<span class="hljs-comment">// 數據庫密碼</span><span class="hljs-string">'password'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// 數據庫連接端口</span><span class="hljs-string">'hostport'</span> => <span class="hljs-string">''</span>,
<span class="hljs-comment">// 數據庫連接參數</span><span class="hljs-string">'params'</span> => [],
<span class="hljs-comment">// 數據庫編碼默認采用utf8</span><span class="hljs-string">'charset'</span> => <span class="hljs-string">'utf8'</span>,
<span class="hljs-comment">// 數據庫表前綴</span><span class="hljs-string">'prefix'</span> => <span class="hljs-string">'think_'</span>,
<span class="hljs-comment">// 數據庫調試模式</span><span class="hljs-string">'debug'</span> => <span class="hljs-keyword">true</span>,
];
}
```
```
## 設置字段信息
默認情況下,系統會自動獲取模型對應數據表的字段信息(用于非數據表字段的寫入過濾、參數綁定等),如果你希望減少數據庫的開銷,也可以手動設置數據表的字段信息包括類型(參數綁定是自動判斷的無需設置),例如:
```
<pre class="calibre18">
```
<span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Model</span>;
<span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span></span>{
<span class="hljs-comment">// 設置當前模型對應的完整數據表名稱</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$table</span> = <span class="hljs-string">'think_user'</span>;
<span class="hljs-comment">// 設置數據表主鍵</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$pk</span> = <span class="hljs-string">'id'</span>;
<span class="hljs-comment">// 設置當前數據表的字段信息</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$field</span> = [
<span class="hljs-string">'id'</span> => <span class="hljs-string">'int'</span>,
<span class="hljs-string">'birthday'</span> => <span class="hljs-string">'int'</span>,
<span class="hljs-string">'status'</span> => <span class="hljs-string">'int'</span>,
<span class="hljs-string">'create_time'</span> => <span class="hljs-string">'int'</span>,
<span class="hljs-string">'update_time'</span> => <span class="hljs-string">'int'</span>,
<span class="hljs-string">'nickname'</span>, <span class="hljs-string">'email'</span>,
];
}
```
```
> 如果字段類型為字符串類型可以不設置類型。
- 脕茫隆壟脨貌脩脭
- 脕茫隆壟脨貌脩脭
- 脪祿隆壟祿霉麓隆
- 脪祿隆壟祿霉麓隆
- 露鎂隆壟URL潞脥脗路脫脡
- 露鎂隆壟URL潞脥脗路脫脡
- 脠媒隆壟脟毛脟貿潞脥脧矛脫婁
- 脠媒隆壟脟毛脟貿潞脥脧矛脫婁
- 脣脛隆壟脢媒戮脻驢芒
- 脣脛隆壟脢媒戮脻驢芒
- 脦氓隆壟虜茅脩爐脫茂脩脭
- 脦氓隆壟虜茅脩爐脫茂脩脭
- 脕霉隆壟脛攏脨脥潞脥鹿脴脕陋
- 攏簍1攏漏脛攏脨脥露簍脪氓
- 攏簍2攏漏祿霉麓隆虜脵脳梅
- 攏簍3攏漏露脕脠隆脝梅潞脥脨脼賂脛脝梅
- 攏簍4攏漏脌脿脨脥脳陋祿祿潞脥脳脭露爐脥錨魯脡
- 攏簍5攏漏虜茅脩爐路露脦摟
- 攏簍6攏漏脢盲脠毛潞脥脩茅脰隴
- 攏簍7攏漏鹿脴脕陋
- 攏簍8攏漏脛攏脨脥脢盲魯枚
- 脝脽隆壟脢脫脥錄潞脥脛攏擄氓
- 脝脽隆壟脢脫脥錄潞脥脛攏擄氓
- 擄脣隆壟碌梅脢脭潞脥脠脮脰戮
- 擄脣隆壟碌梅脢脭潞脥脠脮脰戮
- 戮脜隆壟API驢陋路壟
- 戮脜隆壟API驢陋路壟
- 脢廬隆壟脙眉脕卯脨脨鹿隴戮脽
- 脢廬隆壟脙眉脕卯脨脨鹿隴戮脽
- 脢廬脪祿隆壟脌漏脮鹿
- 脢廬脪祿隆壟脌漏脮鹿
- 脢廬露鎂隆壟脭脫脧卯
- Cookie
- Session
- 碌樓脭陋虜芒脢脭
- 脥錄脧帽麓婁脌鉚
- 脦脛錄鎂脡脧麓蘆
- 脩茅脰隴脗毛
- 賂陸脗錄
- A隆壟魯攏錄沒脦脢脤芒錄爐
- B隆壟3.2潞脥5.0脟酶鹵冒
- C隆壟脰煤脢脰潞爐脢媒
- 路盧脥芒脝陋攏潞脩摟脧擄ThinkPHP5碌脛脮媒脠路脳脣脢脝
- 路盧脥芒脝陋攏潞脩摟脧擄ThinkPHP5碌脛脮媒脠路脳脣脢脝