ホームページ >バックエンド開発 >PHPチュートリアル >データ検索機能を実装するための ThinkPHP の getlist メソッドの使用に関する分析

データ検索機能を実装するための ThinkPHP の getlist メソッドの使用に関する分析

不言
不言オリジナル
2018-06-08 11:58:512032ブラウズ

この記事では、主に ThinkPHP が getlist メソッドを使用してデータ検索機能を実装する方法、getlist に基づいて指定された条件に基づいてデータを読み取って表示する thinkPHP の実装方法、およびその他の関連する操作テクニックを例の形式で詳細に分析します。必要な場合は、次を参照してください。

この記事の例では、ThinkPHP が getlist メソッドを使用してデータ検索機能を実装する方法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

私は ThinkPHP のモデルに getlist メソッドを記述します。実際、いわゆる検索関数は %string% または のようなものにすぎません。その他、データベース クエリで使用されるフィールド名 = 特定の値。これらの SQL ステートメントは、HTML では

<form action="" method="get">
    <table class="account_table" width="100%" cellpadding="0" cellspacing="0">
      <tr>
        <td style="text-align:right">订单号:</td>
        <td>
          <input id="Orderid" name="order_sn" class="inp_wid3" type="text" value="{$_GET[&#39;order_sn&#39;]}"/>
        </td>
        <td style="text-align:right">
          下单日期:
        </td>
        <td colspan="5">
          <input type="text" class="inp_wid2" id="BeginTime" name="begintime" value="{$_GET[&#39;begintime&#39;]}" />
          至
          <input type="text" class="inp_wid2" id="EndTime" name="endtime" value="{$_GET[&#39;endtime&#39;]}" />
           交易完成日期
          <input type="text" class="inp_wid2" id="txtFinishedBeginTime" name="finishbegintime" value="{$_GET[&#39;finishbegintime&#39;]}" />
          至
          <input type="text" class="inp_wid2" id="txtFinishedEndTime" name="finishendtime" value="{$_GET[&#39;finishendtime&#39;]}" />
           订单金额:
          <input type="text" class="inp_wid2" id="txtMoneyMin" name="count_price_min" value="{$_GET[&#39;count_price_min&#39;]}"/>
          至
          <input type="text" class="inp_wid2" id="txtMoneyMax" name="count_price_max" value="{$_GET[&#39;count_price_max&#39;]}" />
        </td>
      </tr>
      <tr>
        <td style="text-align:right; width:80px">采购商名称:</td>
        <td style="width:140px">
          <input id="SupermarketName" name="user_nick_name" class="inp_wid3" type="text" value="{$_GET[&#39;user_nick_name&#39;]}" />
        </td>
        <td style="text-align:right; width:80px">采购商账号:</td>
        <td style="width:140px">
          <input id="SupermarketZh" name="user_name" class="inp_wid3" type="text" value="{$_GET[&#39;user_name&#39;]}" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <input class="search_btn1" type="submit" value="搜索" id="Search" />
          </td>
      </tr>
    </table>
</form>

に結合されます。

フォームを送信するための GET メソッドがありません。これはクエリ条件入力オプションです。

コントローラ内:

$order_msg=$order->getList();
$this->assign(&#39;info&#39;,$order_msg);//这个获取订单的详细信息

モデル内:

public function getList($pagesize=25){
     $tableName = $this->getTableName();
   $where = $tableName.&#39;.service_id = &#39;.$_SESSION[&#39;service_site&#39;][&#39;service_id&#39;];
   if(!empty($_GET[&#39;order_sn&#39;])){//查询订单号
       $where.= " and $tableName.`order_sn` like &#39;%".$_GET[&#39;order_sn&#39;]."%&#39;";
     }
   if(!empty($_GET[&#39;count_price_min&#39;])){//查询订单最小金额
       $where.= " and $tableName.count_price >=".$_GET[&#39;count_price_min&#39;]."";
     }
   if(!empty($_GET[&#39;begintime&#39;])){//下单开始日期搜索
    $_GET[&#39;begintime&#39;]=strtotime($_GET[&#39;begintime&#39;]);//将日期转为时间戳
    $where.= " and $tableName.add_time >=".$_GET[&#39;begintime&#39;]."";
    $_GET[&#39;begintime&#39;]=date(&#39;Y-m-d&#39;,$_GET[&#39;begintime&#39;]);//将日期转为时间戳
   }
   if(!empty($_GET[&#39;endtime&#39;])){//下单结束日期搜索
     $_GET[&#39;endtime&#39;]=strtotime($_GET[&#39;endtime&#39;]);//将日期转为时间戳
    $where.= " and $tableName.add_time <=".$_GET[&#39;endtime&#39;]."";
    $_GET[&#39;endtime&#39;]=date(&#39;Y-m-d&#39;,$_GET[&#39;endtime&#39;]);//将时间戳转换成日期,方便刷新页面后前台显示
   }
   if(!empty($_GET[&#39;finishbegintime&#39;])){//交易完成开始日期搜索
    $_GET[&#39;finishbegintime&#39;]=strtotime($_GET[&#39;finishbegintime&#39;]);//将日期转为时间戳
    $where.= " and $tableName.ok_time >=".$_GET[&#39;finishbegintime&#39;]."";
    $_GET[&#39;finishbegintime&#39;]=date(&#39;Y-m-d&#39;,$_GET[&#39;finishbegintime&#39;]);//将日期转为时间戳
   }
   if(!empty($_GET[&#39;finishendtime&#39;])){//交易完成结束日期搜索
     $_GET[&#39;finishendtime&#39;]=strtotime($_GET[&#39;finishendtime&#39;]);//将日期转为时间戳
    $where.= " and $tableName.ok_time <=".$_GET[&#39;finishendtime&#39;]."";
    $_GET[&#39;finishendtime&#39;]=date(&#39;Y-m-d&#39;,$_GET[&#39;finishendtime&#39;]);//将时间戳转换成日期,方便刷新页面后前台显示
   }
   if(!empty($_GET[&#39;send&#39;])){//查询已发货预警订单,发货时间距离此刻超过五天
    $where.= " and $tableName.send_time < &#39;".(time()-60*60*24*5)."&#39;";
   }
   if(!empty($_GET[&#39;doingorder&#39;])){//查询处理中的订单
    $where.= " and $tableName.status in (0,1)";
   }
   if(!empty($_GET[&#39;warningorder&#39;])){//查询预警的订单:已经付款且时间超过24小时未发货
    $where.= " and $tableName.pay_time < &#39;".(time()-60*60*24)."&#39;";
   }
   if(!empty($_GET[&#39;warningorder&#39;])){//查询预警的订单:已经付款且时间超过24小时未发货
    $where.= " and $tableName.is_pay = 1 ";
   }
   if(!empty($_GET[&#39;warningorder&#39;])){//查询预警的订单:已经付款且时间超过24小时未发货
   $where.= " and $tableName.status in (0,1)";
   }
   if(!empty($_GET[&#39;count_price_max&#39;])){//查询订单最大金额
    $where.= " and $tableName.count_price <=".$_GET[&#39;count_price_max&#39;]."";
   }
   if(!empty($_GET[&#39;user_nick_name&#39;])){//查询采购商名称
    $where.= " and fab_user.nick_name like &#39;".$_GET[&#39;user_nick_name&#39;]."%&#39;";
   }
   if(!empty($_GET[&#39;user_name&#39;])){//查询采购商账号
    $where.= " and fab_user.user_name like &#39;".$_GET[&#39;user_name&#39;]."%&#39;";
   }
   if(!empty($_GET[&#39;supplier_nick_name&#39;])){//查询供应商商名称
    $where.= " and fab_supplier.nick_name like &#39;".$_GET[&#39;supplier_nick_name&#39;]."%&#39;";
   }
   if(!empty($_GET[&#39;supplier_name&#39;])){//查询供应商账号
    $where.= " and fab_supplier.supplier_name like &#39;".$_GET[&#39;supplier_name&#39;]."%&#39;";
   }
   if($_GET[&#39;history&#39;] == 1){
     $where .= " and {$tableName}.status in (2,3,4) ";
   }
   if(($_GET[&#39;pay_type&#39;])!=""&&($_GET[&#39;pay_type&#39;])!=-1){//查询支付方式
    $where.= " and fab_order_info.pay_type = ".$_GET[&#39;pay_type&#39;]."";
   }
   if(($_GET[&#39;status&#39;])!=""&&($_GET[&#39;status&#39;])!=-1){//查询订单状态
    $where.= " and fab_order_info.status = ".$_GET[&#39;status&#39;]."";
   }
     if(!empty($_GET[&#39;stime&#39;]) && !empty($_GET[&#39;etime&#39;])){
       $stime = strtotime($_GET[&#39;stime&#39;]);
       $etime = strtotime($_GET[&#39;etime&#39;]) + 24*60*60;
       $where.= " and ($tableName.`inputtime` between &#39;$stime&#39; and &#39;$etime&#39;)";
     }
     $count = $this->where($where)->count();
     $this->countNum = $count;
     $Page = new \Think\Page($count,$pagesize);
     $this->page = $Page->show();
     $limit = $Page->firstRow.&#39;,&#39;.$Page->listRows;
    $sql="select $tableName.*,fab_supplier.nick_name as supplier_nick_name,fab_user.nick_name as user_nick_name
    from ($tableName left join fab_supplier on fab_order_info.supplier_id=fab_supplier.supplier_id)
    left join fab_user on fab_order_info.user_id=fab_user.user_id where $where order by $tableName.`order_id` desc limit $limit";
    $sqls="select sum(fab_order_info.count_price) as order_price,count(fab_order_info.count_price) as order_count
    from $tableName where $where order by $tableName.`order_id` desc limit $limit";
    $this->sql_msg=$this->query($sqls);
    return $this->query($sql);//订单详细信息
}

注意する必要があるのは、GET データの取得と SQL ステートメントの結合だけです。なぜいつも間違って結合するのでしょうか。 ! !

<?php
namespace Admin\Model;
use Think\Model;
class KuaidicompanyModel extends Model {
  private $page = "";
  public function getList($pagesize=25){
    $where = &#39;1&#39;;
    $tableName = $this->getTableName();
    $count = $this->where($where)->count();
    $Page = new \Think\Page($count,$pagesize);
    $this->page = $Page->show();
    $limit = $Page->firstRow.&#39;,&#39;.$Page->listRows;
    return $this->query("select * from $tableName where $where order by $tableName.`id` asc limit $limit ");
  }
  public function getPage(){
    return $this->page;
  }
}

getlist の簡略化された一般バージョン。ページングに適しています。

<?php
namespace Admin\Model;
use Think\Model;
class KuaidicompanyModel extends Model {
  private $page = "";
  public function getList($pagesize=25){
    $where = &#39;1&#39;;
    $tableName = $this->getTableName();
    $count = $this->where($where)->count();
    $Page = new \Think\Page($count,$pagesize);
    $this->page = $Page->show();
    $limit = $Page->firstRow.&#39;,&#39;.$Page->listRows;
    return $this->query("select * from $tableName where $where order by $tableName.`id` asc limit $limit ");
  }
  public function getPage(){
    return $this->page;
  }
}

Model の合理化バージョンは自動データ検証に使用されます

上記記事全体の内容です。皆さんの学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

ThinkPHP ウォーターマークの分析とウォーターマーク位置の設定


データの追加と表示を実装するための thinkphp フレームワークについて関数メソッド


#thinkphp3.2.0 の setInc メソッドのソース コード分析


以上がデータ検索機能を実装するための ThinkPHP の getlist メソッドの使用に関する分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。