## 模型對象
#### 1.定義:特定數據表字段信息的對象描述;
>[info] 從定義可以分析出二點:
> 1. 數據表的描述與模型定久是綁定的;
> 2. 數據表的字段與模型對象的屬性是綁定的;
* * * * *
#### 2. 步驟:
1. 創建與數據表對應的模型類;
2. 控制器進行調用;
* * * * *
#### 3. 實例. 創建與tp5_staff數據表的模型類
1. 創建tp5_staff數據表
* staff數據表結構如下:
| 序號 | 字段名 | 類型 | 寬度 | 約束 | 默認值|備注 |
| --- | --- | --- | --- | --- | --- |
| 1 | id | 整型 | 4位 | 無符號、不為空、自增、主鍵|無 | 編號 |
| 2 | name | 變長字符串 | 30位 | 不為空 | 無 |姓名 |
| 3 | sex | 整型 | 1位 | 不為空 | 1 |性別1男0女|
| 4 | salary |浮點型 | 共10位小數2位 |無符號、不為空 |2000 |工資|
| 5 | dept |變長字符串 | 20位 |不為空 | 開發部 |部門|
| 6 | hiredate |日期 | 默認 | 不為空 | 0000-00-00 |入職日期|
* 創建語句如下:
~~~
CREATE TABLE IF NOT EXISTS staff (
id INT(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '編號',
name VARCHAR(30) NOT NULL COMMENT '姓名',
sex TINYINT(2) unsigned NOT NULL DEFAULT 1 COMMENT '性別1男0女',
salary FLOAT(10,2) NOT NULL DEFAULT 2000.00 COMMENT '工資',
dept VARCHAR(20) NOT NULL DEFAULT '開發部' COMMENT '部門' ,
hiredate DATE NOT NULL DEFAULT '0000-00-00' COMMENT '入職日期',
PRIMARY KEY (id)
)ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1001;
~~~
2. 針對該表創建與之對應的模型類:
* 第一步:創建模型類:Staff.php
* 在應用目錄application的Index模塊下創建model目錄,用來存放模型類文件
* 在/application/index/model/目錄下創建:Staff.php:
~~~
<?php
namespace app\index\model;
//導入模型類
use think\model;
//定義類Staff,繼承model類
class Staff extends model {
//此處是自定義模型類代碼,目前為空
}
}
~~~
>[warning] model類是抽象類,必須由子類繼承后才可以使用。
### “就這么簡單,模型創建成功了!”
* 第二步: 下面演示如何調用這個模型類Staff:
* 創建控制器Index.php:
~~~
<?php
namespace app\index\controller;
//導入模型類
use app\index\model\Staff;
class Index {
public function index(){
//創建模型類Staff
$model = new Staff();
//查看Staff類實例$model
dump($model);
}
}
~~~
* 第三步: 測試模型對象Staff
* 瀏覽器訪問這個控制器: tp5.com/index.php/index/index/index/
* Staff類實例:$model對象內容如下:
>[info] 為教學方便,部分注釋比源碼要詳細
~~~
//該對象共計有28個受保護屬性,必須在本類或子類中使用,外部不能直接使用
object(app\index\model\Staff)#5 (28) {
//數據庫配置數組
["connection":protected] => array(0) {
}
//數據庫查詢對象,負責最終完成對數據庫的操作
["query":protected] => NULL
//模型名稱 ,創建時自動賦值
["name":protected] => string(5) "Staff"
//與模型綁定的數據表的完整名稱(包括前綴的表名,如:tp5_staff)
["table":protected] => NULL
//用命名空間表示的、當前的模型類名:Staff
["class":protected] => string(21) "app\index\model\Staff"
//出錯時顯示的信息
["error":protected] => NULL
//字段驗證規則
["validate":protected] => NULL
//數據表主鍵
["pk":protected] => NULL
//數據表字段名列表(與數據表對應)
["field":protected] => array(0) {
}
//只讀字段列表
["readonly":protected] => array(0) {
}
//顯示字段列表
["visible":protected] => array(0) {
}
//隱藏屬性字段列表
["hidden":protected] => array(0) {
}
//追加屬性列表
["append":protected] => array(0) {
}
//與數據表字段對應的信息列表(極其重要)
["data":protected] => array(0) {
}
//字段修改信息列表
["change":protected] => array(0) {
}
//自動完成列表
["auto":protected] => array(0) {
}
//新增自動完成列表
["insert":protected] => array(0) {
}
//更新自動完成列表
["update":protected] => array(0) {
}
// 是否需要自動寫入時間戳 如果設置為字符串 則表示時間字段的類型
["autoWriteTimestamp":protected] => bool(false)
//設置表中:創建時間字段的名稱
["createTime":protected] => string(11) "create_time"
//設置表中:更新時間字段的名稱
["updateTime":protected] => string(11) "update_time"
//設置表中:時間字段的格式
["dateFormat":protected] => string(11) "Y-m-d H:i:s"
//數據表中各字段類型定義
["type":protected] => array(0) {
}
//是否是:更新操作
["isUpdate":protected] => bool(false)
//更新條件
["updateWhere":protected] => NULL
//當前執行的關聯條件
["relation":protected] => NULL
//驗證失敗是否拋出異常
["failException":protected] => bool(false)
//全局查詢范圍設置
["useGlobalScope":protected] => bool(true)
}
~~~
* * * * *
#### 4. 總結:
1. 目前創建的模型雖然按相關規則,已經與特定數據表綁定了,但是該類的絕大多數屬性的值,仍處于默認或不確定狀態;
2. 現在該模型中有二個屬性值是確定的:
* $name //模型名稱
* $class //模型類命名空間,即如何找到這個類
3. 其它的屬性值,在創建數據對象時,會自動獲取。
- 前言[隨時更新]
- 開發環境
- 1.Mac環境
- 2.windows環境
- 模型對象
- 1.創建模型對象
- 2.模型初始化
- 數據對象
- 1.定義數據對象
- 2.創建數據對象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查詢數據對象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP難點總結
- 1.get_class( )實例講解
- 2.get_called_class( )實例講解
- 3.__call( )實例講解
- 3.__callStatic( )實例講解
- 4.call_user_func_array函數[重點]
- 5.普通方法與靜態方法
- 6.在Model源碼中的應用
- 7.new static 延遲靜態綁定
- PHP標準化規范
- 查詢數據
- 1.獲取單條:get靜態方法
- 2.獲取單條:對象查詢
- 3.獲取多條:all靜態方法
- 4.獲取多條:對象查詢
- 5.獲取字段值:value方法
- 6.獲取列值:column方法
- 7.動態查詢:getBy字段名
- 8.助手函數:model查詢
- 9.加載器:Loader類查詢
- 10.數據庫與模型查詢對比
- 新增數據
- 1.sava方法
- 2.savaAll方法
- 3.create靜態方法
- 4.insert靜態調用
- 更新數據
- 1.單條更新:save方法
- 2.批量更新:saveAll方法
- 3.靜態更新:update方法
- 4.查詢類Query直接更新
- 5. 閉包更新
- 刪除數據
- 1.刪除當前記錄:delete
- 2.靜態條件刪除:destory
- 獲取器
- 1.模型方法:set屬性Attr
- 修改器
- 1.set屬性Attr
- 時間戳
- 1.MySQL中日期類型復習
- 2.時間戳功能詳解
- 軟刪除[重點]
- 1.traits詳解[選學內容]
- 2.SoftDelet類源碼分析
- 3. delete實例刪除
- 4.destroy條件刪除
- 5.restore恢復數據
- 類型轉換
- 1. 規則設置
- 2. 實例演示
- 查詢范圍
- 1. 基本概念
- 2.實例演示