下面thinkphp框架教程欄目將給大家介紹關于thinkphp5框架中如何查詢并處理數據,希望對需要的朋友有所幫助!
在處理數據庫查詢結果時遇到了些問題,記錄下用到過的幾種查詢方式和結果處理。
1. 查詢某條記錄
$where=array( ??"version_id"=>$version_id ); $data?=?model("PackageWhitelist")->where($where)->find(); $this->assign("package_id",$package_id); $where=array( ??"package_id"=>$package_id ); $data?=?model("Package")->where($where)->find(); if($data){ ??$this->assign("target_version",$data['target_version']); }
2. 查詢某條記錄某個字段
$device_number_list?=?model("PackageWhitelist")->where($where)->field("device_number")->find();
$this->assign("device_number",$device_number_list['device_number']);
3. 查詢多個記錄某個字段 , 并處理結果,結果是一個數組集
立即學習“PHP免費學習筆記(深入)”;
$where=array( ?????"version_id"=>$version_id ?); $data?=?model("PackageWhitelist")->where($where)->field("device_number")->select(); $device_number_list=''; foreach($data?as?$val){ ??$list?=?$val->toArray(); ??if($device_number_list){ ????$device_number_list=$device_number_list.';'.$list["device_number"]; ??}else{ ????$device_number_list=$list["device_number"]; ??} }
4. 查詢多條記錄
$where=array( ??"version_id"=>$version_id ); $data?=?model("PackageWhitelist")->where($where)->select(); $device_number_list=''; foreach($data?as?$val){ ??$list?=?$val->toArray(); ??if($device_number_list){ ????$device_number_list=$device_number_list.';'.$list["device_number"]; ??}else{ ????$device_number_list=$list["device_number"]; ??} }
5. 以頁形式查詢,并處理結果。
public?function?index($version_id){ ??$where=array( ????"version_id"=>$version_id ??); ??$version_name?=?model("Version")->where($where)->field("version_name")->find(); ??$listrows=config("LISTROWS")?config("LISTROWS"):10; ??$package_lists=model("Package")->where($where)->paginate($listrows); ??$package_infos?=?$package_lists->toArray()["data"]; ??foreach($package_infos?as?$key=>$value){ ????$package_infos[$key]?=?array("source_version"?=>?$version_name["version_name"])?+?$package_infos[$key]; ??} }
再來總結一下TP5的三種查詢數據庫方式
方式一:原生sql查詢
代碼示例:
<?php /** * Created by PhpStorm. * User: chenzhitao * Date: 2017/5/8 * Time: 下午2:15 */ namespace appapimodel; use thinkDb; use thinkException; class Banner { public static function getBannerByID($id){ $result = Db::query('select * from banner_item where banner_id=?',[$id]); return $result; } }
方式二:使用查詢構建器
代碼示例:
<?php /** * Created by PhpStorm. * User: chenzhitao * Date: 2017/5/8 * Time: 下午2:15 */ namespace appapimodel; use thinkDb; use thinkException; class Banner { public static function getBannerByID($id){ //1.使用原生sql // $result = Db::query('select * from banner_item where banner_id=?',[$id]); // return $result; //2.使用查詢構建器 /* * 鏈式查詢Db::table('banner_item')->where('banner_id','=',$id)?返回查詢對象,->select();返回查詢結果, ?????*?除了select操作還有?find(返回一條數據)?update?delete?insert ?????*?對應的where?也分三種,1.表達式where('字段名','表達式','查詢條件')?2.數組發?3.閉包。 ?????*/ ????//?2.1?表達式法 //????$result?=?Db::table('banner_item') //??????->where('banner_id','=',$id) //??????->select(); //????return?$result; ????//2.2?閉包法 ????$result?=?Db::table('banner_item') ??????->where(function?($query)?use($id){ ????????$query->where('banner_id','=',$id); ??????}) ??????->select(); ????return?$result; ??} }
方式三:ORM(Object Relation Mapping) 對象關系映射
使用ORM 查詢數據庫主要區別就是在寫模型的繼承thinkmodel類,然后控制器就可以使用model的默認方法來獲取數據而不是自己再在模型中專門寫一個獲取方法
代碼示例:
model:
<?php /** * Created by PhpStorm. * User: chenzhitao * Date: 2017/5/8 * Time: 下午2:15 */ namespace appapimodel; use thinkDb; use thinkModel; class Banner extends Model { // public static function getBannerByID($id){ // //1.使用原生sql //// $result = Db::query('select * from banner_item where banner_id=?',[$id]); //// return $result; // //2.使用查詢構建器 // /* // * 鏈式查詢Db::table('banner_item')->where('banner_id','=',$id)?返回查詢對象,->select();返回查詢結果, //?????*?除了select操作還有?find(返回一條數據)?update?delete?insert //?????*?對應的where?也分三種,1.表達式where('字段名','表達式','查詢條件')?2.數組發?3.閉包。 //?????*/ // //????//?2.1?表達式法 ////????$result?=?Db::table('banner_item') ////??????->where('banner_id','=',$id) ////??????->select(); ////????return?$result; //????//2.2?閉包法 //????$result?=?Db::table('banner_item') //??????->where(function?($query)?use($id){ //????????$query->where('banner_id','=',$id); // //??????}) //??????->select(); //????return?$result; // // // // // //??} }
controller:
<?php /** * Created by PhpStorm. * User: chenzhitao * Date: 2017/5/7 * Time: 下午1:49 */ namespace appapicontrollerv1; use appapivalidateIDMustBePositiveInt; use applibexceptionBannerMissException; use appapimodelBanner as BannerModel; class Banner { public function getBanner($id){ //調用驗證器 (new IDMustBePositiveInt())->goCheck(); //????$banner?=?BannerModel::getBannerByID($id); ????$banner?=?BannerModel::get($id); ????if(!$banner){ ??????throw?new?BannerMissException(); ????} ????return?$banner; ??} }
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END