skyraptor/modelsearch

0.4.1 2019-06-11 13:20 UTC

This package is auto-updated.

Last update: 2024-09-10 20:43:18 UTC


README

CI codecov StyleCI Total Downloads Latest Stable Version Latest Unstable Version License Homepage

Laravel ModelSearch 是一个轻量级、易于使用的包,用于在 Laravel 或 Illuminate 5.8 中为特定模型创建动态搜索查询。

要求

  • Laravel 5.7+

安装

Composer

只需运行 composer require skyraptor/modelsearch 来安装最新版本的包,之后运行 composer update。该包将使用 Laravel 的包发现机制注册自己的 ServiceProvider。

配置

此包包含自己的配置文件,您应该通过运行命令 php artisan vendor:publish 并遵循屏幕上的说明来发布它。在配置文件中,您需要调整过滤目录的命名空间以及您的请求过滤前缀。

return [
   'filtersFQCN' => 'App\\Filters\\',
   'requestFilterPrefix' => 'filter_'
];

过滤

为了定义一个过滤条件,您必须在过滤目录中创建一个与您的模型同名的文件夹。在这个文件夹内,您可以创建针对该模型特定的过滤条件。例如
path\to\laravel\app\Filters\User\HasId.php 您的过滤条件必须扩展 ModelSearch\Contracts\Filter。

<?php

namespace App\Filters\User;

use ModelSearch\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;


class HasId implements Filter
{
   /**
    * Apply a given search value to the builder instance.
    *
    * @param Builder $builder
    * @param integer $value
    * @return Builder $builder
    */
   public static function apply(Builder $builder, $value)
   {
       return $builder->where( 'id', $value );
   }
}

请求过滤

配置中的请求过滤前缀定义了用于请求参数中过滤名称的前缀。这可以用于允许用户通过 POST 和 GET 请求应用过滤条件。这必须通过调用 addRequestFilters 方法并提供一个请求实例来手动完成。

请始终记住按照适当的顺序应用过滤条件。

$search = new ModelSearch( User::class );
$search->addRequestFilters( $request );
$result = $search->result();

您可以通过调用 setRequestFilterPrefix() 方法并提供一个新前缀来更改搜索后的过滤前缀。

示例

以下示例展示了如何在控制器中使用搜索:

namespace ModelSearch\ModelSearch;


public function someController( Request $request ) {
    ...

    $search = new ModelSearch( User::class );
    $search->addFilters([
        'HasId' => 1,
        'HasLastName' => 'Doe'
    ]);
    $search->addFilter('SomeFilter', 'value');
    $result = $search->result();

    // The search can be extended after processing results
    $search->addFilter('AnotherFilter', 'value');
    $result2 = $search->result();

    ...
}