# 模型
>模型(Model) - 程序員編寫程序應有的功能(實現算法等等)、數據庫專家進行數據管理和數據庫設計(可以實現具體的功能).
在 `MVC` 組件的互動中,
`模型(Model)` 用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。`Model` 有對數據直接訪問的權力,例如對數據庫的訪問。 `Model` 不依賴 `View` 和 `Controller`,也就是說, `Model` 不關心它會被如何顯示或是如何被操作. 但是 `Model` 中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用于監視此 `Model` 的 `View` 必須事先在此 `Model` 上注冊,從而,View 可以了解在數據 `Model` 上發生的改變。 (比較:觀察者模式 (軟件設計模式))
在本書中,主要使用 `Think-ORM` 與數據庫進行交互.
## 創建 模型文件
鍵入命令:
~~~~ shell
/* make:model 創建 模型文件 */
php think make:model user/User
~~~~
完成后,打開新建的 模型文件 `application/user/model/User.php`:
可以看到默認生成的 模型文件 已經為我們創建好了 命令空間、繼承 等操作.
## 約定成俗的 表名
在實際的模型處理當中,`Think-ORM` 會根據 模型文件名 自動找到 表名 進行操作.
默認情況下,會使用類的「下劃線命名法」與「復數形式名稱」來作為數據表的名稱生成規則。如:
* User 對應 users 表
* BlogList 對應 blog_list 表
因此 `Think-ORM` 將會假設模型儲存在對應的表中,如果你需要手動指定數據表,可以通過 `$table` 來指定:
~~~~ php
/* 指定 auths 表 */
protected $table = 'auths';
~~~~
## 約定編程
>約定編程(convention over configuration),是一種軟件設計范式,旨在減少軟件開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性.
本質是說,開發人員僅需規定應用中不符約定的部分。例如,如果模型中有個名為 `Sale` 的類,那么數據庫中對應的表就會默認命名為 `sales`,只有在偏離這一約定時,例如將該表命名為 `products_sold`, 才需寫有關這個名字的配置.
如果您所用工具的約定與你的期待相符,便可省去配置;反之,你可以配置來達到你所期待的方式.
- 第一章. 基礎信息
- 1.1 序言
- 1.2 關于作者
- 1.3 本書源碼
- 1.4 反饋糾錯
- 1.5 安全指南
- 1.6 捐助作者
- 第二章. 開發環境布置
- 2.1 編輯器選用
- 2.2 命令行工具
- 2.3 開發環境搭建
- 2.4 瀏覽器選擇
- 2.5 第一個應用
- 2.6 Git 工作流
- 第三章. 構建頁面
- 3.1 章節說明
- 3.2 靜態頁面
- 3.3 Think 命令
- 3.4 小結
- 第四章. 優化頁面
- 4.1 章節說明
- 4.2 樣式美化
- 4.3 局部視圖
- 4.4 路由鏈接
- 4.5 用戶注冊頁面
- 4.6 集中視圖
- 4.7 小結
- 第五章. 用戶模型
- 5.1 章節說明
- 5.2 數據庫遷移
- 5.3 查看數據表
- 5.4 模型文件
- 5.5 小結
- 第六章. 用戶注冊
- 6.1 章節說明
- 6.2 注冊表單
- 6.3 用戶數據驗證
- 6.4 注冊失敗錯誤信息
- 6.5 注冊成功
- 6.6 小結
- 第七章. 會話管理
- 7.1 章節說明
- 7.2 會話
- 7.3 用戶登錄
- 7.4 退出
- 7.5 小結
- 第八章. 用戶 CRUD
- 8.1 章節說明
- 8.2 重構代碼
- 8.3 更新用戶
- 8.4 權限系統
- 8.5 列出所有用戶
- 8.6 刪除用戶
- 8.7 訪客模式
- 8.8 優化前端
- 8.9 小結
- 第九章. 微博 CRUD
- 9.1 章節說明
- 9.2 微博模型
- 9.3 顯示微博
- 9.4 發布微博
- 9.5 微博數據流
- 9.6 刪除微博
- 9.7 小結