Heim  >  Artikel  >  PHP-Framework  >  Verwendung der ThinkPHP6-Suchmaschine

Verwendung der ThinkPHP6-Suchmaschine

wpj
wpjOriginal
2020-05-07 09:45:42192Durchsuche

Neue Modellsuchfunktion in ThinkPHP5.1.22. Die Funktion des Suchers besteht darin, den Abfragebedingungsausdruck des Felds (oder die Suchkennung) zu kapseln. Ein Sucher entspricht einer speziellen Methode (die Methode muss vom öffentlichen Typ sein: searchFieldNameAttr).

Suchszenarien umfassen:

  • Einschränken und Standardisieren der Suchbedingungen des Formulars;

  • Vordefinierte Abfragebedingungen vereinfachen die Abfrage ;

Vergleich der Sucher:

  • Der Sucher vergleicht normalerweise mit dem Suchbereich, egal wie viele Sucher definiert sind Dies muss einmal durchgeführt werden. Wenn der Abfragebereich kombiniert werden muss, muss er mehrmals aufgerufen werden.

1. Erstellen Sie das Admin.php-Modell im Appmodel-Verzeichnis

Die im Admin-Modell definierte Methode getByData() wird verwendet, um Daten abzufragen und in JSON zurückzugeben Format, weil wir Das Frontend verwendet die Datentabelle von LayUI. Die beiden Methoden searchUsernameAttr() und searchCreateTimeAttr() entsprechen genau der Namenskonvention des Suchers: searchFieldNameAttr, FieldName ist die Kamel-Case-Konvertierung des Datentabellenfelds, und der Sucher wird nur ausgelöst, wenn die Methode withSearch aufgerufen wird. Die Suchmethode verfügt über drei Parameter: Der erste ist das Abfrageobjekt, der zweite ist der Wert der aktuellen Suchkennung und der dritte sind alle aktuellen Suchdaten (optional).

<?php

namespace app\model;

use think\Exception;
use think\Model;

class Admin extends Model
{

    //查询数据(数据表格)
    public static function getByData($limit=&#39;10&#39;,$order=&#39;id desc&#39;,$field=&#39;*&#39;,$search=[],$searchKey=[])
    {
        try {
            //查询数据
            $result = self::withSearch($searchKey,$search)->order($order)->field($field)->paginate(request()->get(&#39;limit&#39;,$limit))->toArray();
        }catch (\Exception $e){
            throw new Exception(&#39;数据库内部错误!&#39;);
        }
        //返回格式为json的数据
        return json([
            &#39;code&#39;  =>  0,
            &#39;msg&#39;   =>  &#39;数据请求成功&#39;,
            &#39;count&#39; =>  $result[&#39;total&#39;],
            &#39;data&#39;  =>  $result[&#39;data&#39;]
        ]);
    }

    /**
     * @desc 查询用户名
     * @param $query    查询对象
     * @param $value    搜索的值
     * @param $data     搜索数据(可忽略)
     */
    public function searchUsernameAttr($query, $value, $data)
    {
        $query->where(&#39;username&#39;,&#39;like&#39;, &#39;%&#39; . $value . &#39;%&#39;);
    }

    /**
     * @desc 添加时间范围查询
     * @param $query
     * @param $value
     */
    public function searchCreateTimeAttr($query, $value)
    {
        $query->whereBetweenTime(&#39;create_time&#39;, $value[0], $value[1]);
    }
}

2. Erstellen Sie den Admin.php-Controller im Appcontroller-Verzeichnis.

<?php

namespace app\controller;

use app\BaseController;

use app\model\Admin as AdminModel;

class Admin extends BaseController
{
    //渲染页面
    public function index()
    {
        return view();
    }

    //数据表格接口
    public function data()
    {
        //存放搜索条件
        $search = [];

        //接收前台查询传递过来的参数
        $username = request()->param(&#39;username&#39;,&#39;&#39;,&#39;trim&#39;);
        $create_time  = request()->param(&#39;create_time&#39;,&#39;&#39;,&#39;trim&#39;);

        //如果参数不为空,把数据赋值给$search
        if (!empty($username)){
            $search[&#39;username&#39;] = $username;
        }
        if (!empty($create_time)){
            $search[&#39;create_time&#39;] = explode(&#39;~&#39;,$create_time);
        }

        //获取$search[] 中的key
        $searchKey = [];

        if (!empty($search)){
            $searchKey = array_keys($search);
        }

        return AdminModel::getByData(10,&#39;id desc&#39;,&#39;*&#39;,$search,$searchKey);
    }
}

3. Rendering-Ansicht

3.1. Führen Sie den folgenden Befehl im Projektverzeichnis aus:

composer require topthink/think-view

3.2. Erstellen Sie die Datei index.html im Ordner appviewadmin

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>搜索器</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="https://heerey525.github.io/layui-v2.4.3/layui-v2.4.4/css/layui.css"  media="all">
    <script src="https://heerey525.github.io/layui-v2.4.3/layui-v2.4.4/layui.js" charset="utf-8"></script>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>

<body>
<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card">
                <!-- 搜索框 -->
                <div class="layui-card-body" style="padding-bottom: 0;">
                    <div class="layui-form">
                        <div class="layui-inline layui-show-xs-block">
                            <input type="text" id="username" name="username" placeholder="请输入用户名" autocomplete="off" class="layui-input">
                        </div>
                        <div class="layui-inline layui-show-xs-block">
                            <input type="text" id="test1" name="create_time" placeholder="请选择时间范围" autocomplete="off" class="layui-input">
                        </div>
                        <div class="layui-inline layui-show-xs-block">
                            <button class="layui-btn" id="search"><i class="layui-icon">&#xe615;</i></button>
                        </div>
                    </div>
                </div>
                <div class="layui-card-body ">
                    <!--数据表格-->
                    <table id="dataTable" lay-filter="dataTable"></table>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    layui.use([&#39;layer&#39;,&#39;table&#39;,&#39;form&#39;,&#39;laydate&#39;],function () {
        var layer = layui.layer,form = layui.form,table = layui.table, laydate = layui.laydate;

        //日期时间范围 搜索
        laydate.render({
            elem: &#39;#test1&#39;
            , type: &#39;datetime&#39;
            , range: &#39;~&#39;
        });

        //用户表格初始化
        var dataTable = table.render({
            elem: &#39;#dataTable&#39;
            ,url: "/admin/data" //数据接口
            ,page: true //开启分页
            ,toolbar: "#toolbarTpl"
            ,cols: [[ //表头
                {checkbox: true,fixed: &#39;left&#39;}
                ,{field: &#39;id&#39;, title: &#39;ID&#39;, sort: true,width:70}
                ,{field: &#39;username&#39;, title: &#39;用户名&#39;}
                ,{field: &#39;create_time&#39;, title: &#39;添加时间&#39;,width:160}
            ]]
        });

        //搜索
        $("#search").click(function () {
            var username = $("#username").val();
            var create_time = $("#test1").val();
            dataTable.reload({
                where:{username:username,create_time:create_time},
                page:{curr:1}
            });
        });
    });
</script>
</html>

4. Suchdemo

Verwendung der ThinkPHP6-Suchmaschine

Das obige ist der detaillierte Inhalt vonVerwendung der ThinkPHP6-Suchmaschine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn