#### 獲取數據對象原始數據:getData()
所謂數據對象原始數據:其實就是對象的$data=[ ]數組的值
~~~
/**
* 獲取對象原始數據 如果不存在指定字段返回false
* @access public
* @param string $name 字段名 留空獲取全部
* @return mixed
* @throws InvalidArgumentException
*/
public function getData($name = null)
{
if (is_null($name)) { //如何不傳參數
return $this->data; //返回整個數組(模型對象中與記錄對應的字段集)
} elseif (array_key_exists($name, $this->data)) { //參數鍵名是否$data中存在
return $this->data[$name]; //返回當前數組元素,如:$data['name'],name為字段名
} else { //如果傳入的鍵名在表中無對應字段對應,則返回錯誤信息
throw new InvalidArgumentException('property not exists:' . $this->class . '->' . $name);
}
}
~~~
實例
~~~
<?php
namespace app\index\controller;
//導入模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.創建模型對象$model
//此時的模型對象僅僅完成了與特定數據表的綁定
//理論上講,仍是一個沒有任何數據的空模型
$model = new Staff();
//2.創建數據源,供創建數據對象使用
$data = [];
$data['id'] = 1001;
$data['name'] = 'Peter';
$data['age'] = 26;
//3.data()方法完成前面模型對象的$data屬性賦值
//使模型對象轉換成數據對象,現在$model 已經是數據對象啦
$model -> data($data);
//4.getData()方法獲取數據對象原始數據$data
$result = $model -> getData();
//5.查看數據對象原始數據:$data屬性(數組類型)
dump($result);
}
}
~~~
查看數據對象原始數據:$data屬性
~~~
array(3) {
["id"] => int(1001)
["name"] => string(6) "Peter"
["age"] => int(26)
}
string(6) "Jackee"
~~~
getAttr()方法獲取數據對象原始數據
~~~
//getAttr()方法獲取數據對象原始數據$data['name']的值
$result = $model -> getAttr('name'); // "Jackee"
~~~
* * * * *
#### 多條數據查詢all()
控制器方法
~~~
<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index {
public function index(){
//1.執行查詢,返回數據對象數組
$result = Staff::all('1009,1010');
//2.遍歷該數據對象數組:$result
//$data既是循環變量,也是其中一個數據對象
foreach ($result as $data){
//getData()可以獲取數據對象原始數據:$data屬性值
dump($data -> getData());
}
}
}
~~~
輸出
~~~
array(6) {
["id"] => int(1009)
["name"] => string(6) "王五"
["sex"] => int(1)
["salary"] => float(8100)
["dept"] => string(9) "開發部"
["hiredate"] => string(10) "2017-01-01"
}
array(6) {
["id"] => int(1010)
["name"] => string(6) "王六"
["sex"] => int(1)
["salary"] => float(2000)
["dept"] => string(9) "開發部"
["hiredate"] => string(10) "2017-02-01"
}
~~~
任務2:查詢表中年齡age大于30,并且工資salary大于800的員工信息
~~~
<?php
namespace app\index\controller;
//導入模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.構造查詢表達式
$map['age'] = ['>',30];
$map['salary'] = ['>',8000];
//2.執行查詢,返回數據對象數組
$result = Staff::all($map);
//3.遍歷該數據對象數組:$result
//$data既是循環變量,也是其中一個數據對象
foreach ($result as $data){
//getData()可以獲取數據對象原始數據:$data屬性值
dump($data -> getData());
}
}
}
~~~
任務3:在任務2的基礎上(age>30 AND salary>8000),我們又提出了三個需求:按工資排序,只輸出工資最高的3個人的編號,姓名,年齡,工資信息。
~~~
<?php
namespace app\index\controller;
//導入模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.構造閉包函數
$closure = function ($query){
//1.設置字段別名
$field['id'] = '編號';
$field['name'] = '姓名';
$field['age'] = '年齡';
$field['salary'] = '工資';
//2.設置查詢表達式
$map['age'] = ['>',30];
$map['salary'] = ['>',8000];
//3.執行查詢
$query -> field($field) //限制顯示字段
-> where($map) //過濾查詢結果
-> order('salary desc') //按salary字段降序輸出
-> limit(3); //限制輸出數量
};
//2.執行閉包查詢,返回數據對象數組
$result = Staff::all($closure);
//3.遍歷該數據對象數組:$result
//$data既是循環變量,也是其中一個數據對象
foreach ($result as $data){
//getData()可以獲取數據對象原始數據:$data屬性值
dump($data -> getData());
}
}
}
~~~
5. 總結:
all( )方法與查詢類的select方法的功能是一樣的,你完成可以認為這是省去了選擇數據表的select操作。其實將閉包查詢中的all( ),換成:select( )方法,查詢結果是一樣的
~~~
$result = Staff::select($closure);
~~~
與
~~~
$result = Staff::all($closure);
~~~
完全是等價的!
- 目錄
- 5.0.10環境配置
- 5.0.10控制器模型對象
- 5.0.10模型初始化
- 5.0.10定義數據對象
- 5.0.10創建數據對象data()方法
- 5.0.10創建數據對象-setAttr方法
- 5.0.10創建數據對象__set()方法
- 5.0.10查詢數據對象getData()
- 實例
- 5.0.10保存數據save()方法
- 5.0.10保存數據saveAll()
- 5.0.10更新數據save()
- 5.0.10批量更新數據saveAll()
- 5.0.10刪除數據delete()
- 5.0.10刪除數據destroy()
- 5.0.10traits詳解
- ThinkPHP 5.0 速查表
- 注釋
- 環境變量配置
- Model分層
- MVC 邏輯服務數據
- Model分層及多對多關聯的建立
- 控制器調用邏輯層
- Session
- 子域名session共享
- 系統錯誤
- 版本錯誤
- 返回錯誤
- Token令牌及身份識別
- 關聯查詢
- 安裝
- Git安裝
- Composer
- 擴展
- Composer類
- 非Composer類
- 引用第三方庫
- 自定義命令行
- 計劃任務
- 調試
- 調試模式
- 監聽SQL
- 數據庫調試
- 單元測試
- 初始化
- 控制器初始化
- 模型初始化
- 數據緩存
- 實戰
- 版本升級
- 從V5.0.17升級到V5.0.18