php 查询方法all,获取多条:all静态方法
查詢多條數(shù)據(jù):all( )方法all方法與前節(jié)課學(xué)習(xí)的get方法都是靜態(tài)方法,可用模型類直接訪問
2. 源碼:/**
*?查找所有記錄
*?@access?public
*?@param?mixed????????$data??主鍵列表或者查詢條件(閉包)
*?@param?array|string?$with??關(guān)聯(lián)預(yù)查詢
*?@param?bool?????????$cache?是否緩存
*?@return?static[]|false
*?@throws?exception\DbException
*/
public?static?function?all($data?=?null,?$with?=?[],?$cache?=?false)
{??$query?=?static::parseQuery($data,?$with,?$cache);??return?$query->select($data);
}all方法源碼與get源碼幾乎一樣,僅是最后調(diào)用的查詢方法不同:select($data)
3. 參數(shù)與返回值:參數(shù):序號參數(shù)說明1數(shù)字/字符串主鍵列表
2查詢表達式支持所有查詢表達式
3閉包函數(shù)支持更多高級查詢語法返回值:數(shù)據(jù)集對象。
4. 實例演示我們?nèi)砸詔p5_staff數(shù)據(jù)表為例
一、任務(wù)1:獲取tp5_staff表中:id等于1009和1010的記錄控制器:Index.php查詢條件以字符串方式給出:’1009,1010‘<?phpnamespace ?app\index\controller;//導(dǎo)入模型類use?app\index\model\Staff;class?Index?{??public?function?index(){
//1.執(zhí)行查詢,返回數(shù)據(jù)對象數(shù)組??$result?=?Staff::all('1009,1010');
//2.遍歷該數(shù)據(jù)對象數(shù)組:$result??//$data既是循環(huán)變量,也是其中一個數(shù)據(jù)對象??foreach?($result?as?$data){??????????//getData()可以獲取數(shù)據(jù)對象原始數(shù)據(jù):$data屬性值??dump($data?->?getData());
}
}
}all( ) 方法的主鍵列表:還可以用數(shù)組表示//1.執(zhí)行查詢,返回數(shù)據(jù)對象數(shù)組??$result?=?Staff::all([1009,1010]);以上查詢方法,返回的SQL查詢語句都是一樣的:SELECT?*?FROM?`tp5_staff`?WHERE?`id`?IN?(1009,1010)?;
二、任務(wù)2:查詢表中年齡age大于30,并且工資salary大于800的員工信息顯然,對于這樣需求,上面方法無能為力,只能通過構(gòu)造查詢表達式來解決控制器:Index.php<?phpnamespace ?app\index\controller;//導(dǎo)入模型類use?app\index\model\Staff;class?Index?{??public?function?index(){
//1.構(gòu)造查詢表達式??$map['age']?=?['>',30];??????$map['salary']?=?['>',8000];??????//2.執(zhí)行查詢,返回數(shù)據(jù)對象數(shù)組??$result?=?Staff::all($map);
//3.遍歷該數(shù)據(jù)對象數(shù)組:$result??//$data既是循環(huán)變量,也是其中一個數(shù)據(jù)對象??foreach?($result?as?$data){??????//getData()可以獲取數(shù)據(jù)對象原始數(shù)據(jù):$data屬性值??dump($data?->?getData());
}
}
}對應(yīng)的SQL語句:SELECT?*?FROM?`tp5_staff`?WHERE?`age`?>?30?AND?`salary`?>?8000;查詢結(jié)果如下:
三、任務(wù)3:在任務(wù)2的基礎(chǔ)上(age>30 AND salary>8000),我們又提出了三個需求:按工資排序,只輸出工資最高的3個人的編號,姓名,年齡,工資信息。根據(jù)需求,查詢表達式已無法完成,必須借助連貫方法,就這要用到:閉包查詢控制器:Index.php<?phpnamespace ?app\index\controller;//導(dǎo)入模型類use?app\index\model\Staff;class?Index?{??public?function?index(){
//1.構(gòu)造閉包函數(shù)??$closure?=?function?($query){??????????//1.設(shè)置字段別名??$field['id']?=?'編號';??????????$field['name']?=?'姓名';??????????$field['age']?=?'年齡';??????????$field['salary']?=?'工資';??????????//2.設(shè)置查詢表達式??$map['age']?=?['>',30];??????????$map['salary']?=?['>',8000];
//3.執(zhí)行查詢??$query?->?field($field)??//限制顯示字段?->?where($map)????//過濾查詢結(jié)果?->?order('salary?desc')??//按salary字段降序輸出?->?limit(3);???//限制輸出數(shù)量??};??????//2.執(zhí)行閉包查詢,返回數(shù)據(jù)對象數(shù)組??$result?=?Staff::all($closure);
//3.遍歷該數(shù)據(jù)對象數(shù)組:$result??//$data既是循環(huán)變量,也是其中一個數(shù)據(jù)對象??foreach?($result?as?$data){??????//getData()可以獲取數(shù)據(jù)對象原始數(shù)據(jù):$data屬性值??dump($data?->?getData());
}
}
}查詢對應(yīng)的SQL語句:SELECT?`id`?AS?`編號`,`name`?AS?`姓名`,`age`?AS?`年齡`,`salary`?AS?`工資`?FROM?`tp5_staff`?WHERE?`age`?>?30?AND?`salary`?>?8000?ORDER?BY?salary?desc?LIMIT?3瀏覽器查看:array(4)?{
["編號"]?=>?int(1006)
["姓名"]?=>?string(9)?"西門慶"
["年齡"]?=>?int(90)
["工資"]?=>?float(20301)
}array(4)?{
["編號"]?=>?int(1002)
["姓名"]?=>?string(6)?"幫主"
["年齡"]?=>?int(255)
["工資"]?=>?float(12345)
}array(4)?{
["編號"]?=>?int(1028)
["姓名"]?=>?string(6)?"方方"
["年齡"]?=>?int(90)
["工資"]?=>?float(10877)
}數(shù)據(jù)庫查詢結(jié)果:SQLPRO for MySQL工具
5. 總結(jié):all( )方法與查詢類的select方法的功能是一樣的,你完成可以認(rèn)為這是省去了選擇數(shù)據(jù)表的select操作。其實我們將閉包查詢中的all( ),換成:select( )方法,查詢結(jié)果是一樣的$result?=?Staff::select($closure);
與$result?=?Staff::all($closure);
完全是等價的!為什么會是這樣的呢?Model類中并沒有select靜態(tài)方法呀!這就是__callStatic( )魔術(shù)方法的魔力發(fā)揮了作用!記不清的同學(xué),請復(fù)習(xí)OOP編程總結(jié)章節(jié)。
總結(jié)
以上是生活随笔為你收集整理的php 查询方法all,获取多条:all静态方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 牙齿种植价格多少钱啊?
- 下一篇: 联通光纤多少钱啊?
