ThinkPHP5框架中如何查詢并處理數據

下面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(&#39;select * from banner_item where banner_id=?&#39;,[$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(&#39;select * from banner_item where banner_id=?&#39;,[$id]); //    return $result;     //2.使用查詢構建器     /*      * 鏈式查詢Db::table(&#39;banner_item&#39;)->where('banner_id','=',$id)?返回查詢對象,-&gt;select();返回查詢結果, ?????*?除了select操作還有?find(返回一條數據)?update?delete?insert ?????*?對應的where?也分三種,1.表達式where('字段名','表達式','查詢條件')?2.數組發?3.閉包。 ?????*/ ????//?2.1?表達式法 //????$result?=?Db::table('banner_item') //??????-&gt;where('banner_id','=',$id) //??????-&gt;select(); //????return?$result; ????//2.2?閉包法 ????$result?=?Db::table('banner_item') ??????-&gt;where(function?($query)?use($id){ ????????$query-&gt;where('banner_id','=',$id); ??????}) ??????-&gt;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(&#39;select * from banner_item where banner_id=?&#39;,[$id]); ////    return $result; //    //2.使用查詢構建器 //    /* //     * 鏈式查詢Db::table(&#39;banner_item&#39;)->where('banner_id','=',$id)?返回查詢對象,-&gt;select();返回查詢結果, //?????*?除了select操作還有?find(返回一條數據)?update?delete?insert //?????*?對應的where?也分三種,1.表達式where('字段名','表達式','查詢條件')?2.數組發?3.閉包。 //?????*/ // //????//?2.1?表達式法 ////????$result?=?Db::table('banner_item') ////??????-&gt;where('banner_id','=',$id) ////??????-&gt;select(); ////????return?$result; //????//2.2?閉包法 //????$result?=?Db::table('banner_item') //??????-&gt;where(function?($query)?use($id){ //????????$query-&gt;where('banner_id','=',$id); // //??????}) //??????-&gt;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
喜歡就支持一下吧
點贊15 分享