## 數據庫查詢與模型查詢對比
#### 1. 靜態查詢是最基本的,也最具代表性。
>[info] 本節以數據庫與模型靜態查詢來對比一下二者的區別,來結束本章的學習~
* * * * *
#### 2. 二者查詢上的區別:
1. 數據庫查詢:需要在查詢之前設置數據表;
2. 模型查詢:因為已經與數據表綁定,所以不需要事先設置數據表;
3. 數據庫查詢:直接返回一維數組或者二維數組(表中原始數據);
4. 模型查詢:返回數據對象,原始數據保存在屬性$data數組中;
5. 數據庫查詢:直接調用連貫方法生成SQL語句進行查詢;
6. 模型查詢:通過魔術方法間接調用數據庫方法完成查詢。
* * * * *
#### 3. 我們用實例來對比二者之間查詢方式的區別
* 創建模型類:/application/index/mode/Staff.php
~~~
<?php
namespace app\index\model;
//導入模型類
use think\model;
class Staff extends model {
//自定義模型類代碼
}
~~~
**任務** :查詢年齡age>50,工資低于9000的員工信息(要漲工資了嗎?)
* 我們先看一下要查詢的結果是什么?

* 控制器:/application/index/controller/Index.php
~~~
<?php
namespace app\index\controller;
//導入模型類
use think\Db;
use app\index\model\Staff;
class Index {
public function index(){
//設置查詢條件
$map = [];
$map['age'] = ['>',50];
$map['salary'] = ['<',9000];
//數據庫靜態查詢:返回結果集【二維數組】
$result1 = Db::table('tp5_staff')->where($map)->select();
//模型靜態查詢:返回結果集【數據對象數組】
$result2 = Staff::where($map)->select();
//輸出數據庫方式獲取的結果集
dump($result1);
//模型查詢結果是對象數組,必須用循環來遍歷
foreach ($result2 as $data){
//獲取數據對象原始數據
dump($data -> getData());
}
}
}
~~~
* 查詢結果:
~~~
//數據庫靜態查詢結果
array(2) {
[0] => array(7) {
["id"] => int(1004)
["name"] => string(9) "小龍女"
["sex"] => int(0)
["age"] => int(63)
["salary"] => float(2990)
["dept"] => int(2)
["hiredate"] => string(10) "2010-01-20"
}
[1] => array(7) {
["id"] => int(1024)
["name"] => string(9) "魯大師"
["sex"] => int(0)
["age"] => int(60)
["salary"] => float(1300)
["dept"] => int(2)
["hiredate"] => string(10) "2012-09-09"
}
}
//模型靜態查詢結果,已用getData()方法處理過
//下面是查詢到的原始數據:二維數組
array(7) {
["id"] => int(1004)
["name"] => string(9) "小龍女"
["sex"] => int(0)
["age"] => int(63)
["salary"] => float(2990)
["dept"] => int(2)
["hiredate"] => string(10) "2010-01-20"
}
array(7) {
["id"] => int(1024)
["name"] => string(9) "魯大師"
["sex"] => int(0)
["age"] => int(60)
["salary"] => float(1300)
["dept"] => int(2)
["hiredate"] => string(10) "2012-09-09"
}
~~~
>[warning] 可以看出:二者查詢結果完全一致
* * * * *
#### 4. 總結
>[success] 如果僅是簡單的增、刪、改、查操作,數據庫查詢完全可以滿足要求。如果涉及到字段驗證或復雜邏輯,必須要用模型來解決。實際上在開發,我們要堅持始終用模型操作數據庫,以應對復雜多變的開發需求。
- 前言[隨時更新]
- 開發環境
- 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.實例演示