## 助手函數:model( )
>[info] 與數據庫查詢一樣,模型也提供了助手函數:model( )來方便開發者。
***
#### 1. 功能:簡化模型實例化工作。
>[warning] model函數類似于ThinkPHP3.2.3版中大寫字母方法M( )和D( )。
***
#### 2. 源碼:/thinkphp/Helper.php (助手函數類)
>[info] 助手函數類隨框架自動加載,不需要手工導入
* model( )函數源碼:
~~~
/**
* 實例化Model
* @param string $name Model名稱
* @param string $layer 業務層名稱
* @param bool $appendSuffix 是否添加類名后綴
* @return \think\Model
*/
function model($name = '', $layer = 'model', $appendSuffix = false)
{
return Loader::model($name, $layer, $appendSuffix);
}
~~~
>[info] 源碼很簡單,就是調用加載器靜態調用了model方法來完成快速實例化操作。
***
#### 3. 實例演示:
* 創建模型類:/application/index/mode/Staff.php
~~~
<?php
namespace app\index\model;
//導入模型類
use think\model;
class Staff extends model {
//自定義模型類代碼
}
~~~
**任務** :查詢編號id=1009的員工信息(id編號,姓名name,工資salary)
* 控制器:/application/index/controller/Index.php
~~~
<?php
namespace app\index\controller;
class Index {
public function index(){
//獲取滿足條件的單個記錄:返回一個數據對象
$data = model('Staff')->field('id,name,salary')->where('id = 1009')->find();
//解析數據對象中的原始數據:$data屬性
$result = $data -> getData();
//輸出結果:二維數組
dump($result);
}
}
~~~
**代碼分析:**
>[info] 1. 無須引入自定義模型類:use app\index\model\Staff;
> 2. model函數返回的是模型對象,可以直接調用數據庫方法完成查詢操作;
> 3. 本例中,model函數返回的是對象,不是類,不能靜態調用get方法完成操作;
> 4. 盡管調用的是數據庫查詢方法find( )完成,但返回的仍是模型對象,不是二維數組;
> 5. 所以要得到原始數據,必須對數據對象$data添加getData操作來獲取原始數據;
* 返回結果:
~~~
array(3) {
["id"] => int(1009)
["name"] => string(9) "老頑童"
["salary"] => float(5000)
}
~~~
* 對應的SQL語句:
~~~
SELECT `id`,`name`,`salary` FROM `tp5_staff` WHERE ( id = 1009 ) LIMIT 1
~~~
* 用SQLPRO for MySQL查看:

* * * * *
#### 4. 總結:
>[warning] 助手函數model語法簡單,代碼清晰,但執行效率遠低于模型靜態方法查詢!靜態方法語法較復雜,代碼量大,但執行效率高,適合裝逼。究竟用哪個,讀者自己決定吧!總之,我是一直堅持用靜態方法查詢。
- 前言[隨時更新]
- 開發環境
- 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.實例演示