ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 検索エンジンの使用

ThinkPHP6 検索エンジンの使用

wpj
wpjオリジナル
2020-05-07 09:45:42197ブラウズ

ThinkPHP5.1.22では新しいモデルサーチャー機能が追加されました。サーチャーの機能は、フィールド (または検索識別子) のクエリ条件式をカプセル化することです (メソッドの命名規則は、searchFieldNameAttr です)。

検索者のシナリオには以下が含まれます:

  • フォーム内の検索条件の制限と標準化

  • 検索者の比較:

検索者は通常、クエリを比較します。範囲内です、いいえ定義されているサーチャーの数に関係なく、クエリ範囲を結合する必要がある場合は、クエリを複数回呼び出す必要があります。

  • 1. appmodel ディレクトリに Admin.php モデルを作成します

  • フロントエンドは LayUI のデータ テーブルを使用するため、Admin モデルで定義された getByData() メソッドを使用してデータをクエリし、JSON 形式で返します。 searchUsernameAttr() と searchCreateTimeAttr() の 2 つのメソッドは、検索者の命名規則とまったく同じです。searchFieldNameAttr、FieldName はデータ テーブル フィールドのキャメル ケース変換であり、検索者は withSearch メソッドが呼び出されたときにのみトリガーされます。 searcher メソッドには 3 つのパラメータがあり、1 つ目はクエリ オブジェクト、2 つ目は現在の検索識別子の値、3 つ目は現在のすべての検索データ (オプション) です。
<?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. appcontroller ディレクトリに Admin.php コントローラーを作成します。

<?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. ビューをレンダリングします

3.1. プロジェクト ディレクトリで次のコマンドを実行します:

composer require topthink/think-view

3.2. appviewadmin フォルダーにindex.html ファイルを作成します

4. デモを検索します

以上がThinkPHP6 検索エンジンの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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