nh/searchable

使模型可搜索并保持搜索会话

1.1.7 2023-01-19 12:57 UTC

This package is auto-updated.

Last update: 2024-09-19 17:23:50 UTC


README

composer require nh/searchable

控制器

在控制器中添加 Facade 访问器

use Nh\Searchable\Search;

接下来,在 __construct() 方法中添加中间件 search如果存在搜索会话,搜索中间件将自动重定向

/**
 * Instantiate a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('search:key')->only('index');
}

最后,添加一个 search() 方法

/**
 * Display a listing of the searched resource.
 * @param \Illuminate\Http\Request $request
 * @return \Illuminate\Http\Response
 */
public function search(Request $request)
{
    // Make a Search Class
    $search = new Search('key', $request->input('search'));

    // Get an attribute in Search Class
    $keywords = $search->attribute('text');

    // Make the search query
    $posts = Post::search($keywords,'contains',false)->get();

    // Display the result
    return view('my.search.view', compact('posts'));
}

搜索类将使用以下内容创建会话:

  • 键(应该是你的模型,例如:posts)
  • 重定向(默认:'reset' => 'myroute/index' 和 'search' => 'myroute/search')
  • 属性

$request->input('search') 必须是一个字段数组,如 search['text']。

你可以用一个数组来覆盖重定向

$search = new Search('key', $request->input('search'), [
  'reset' => 'custom.redirection',
  'search' => 'custom.redirection'
]);

你可以通过以下方式访问搜索重定向

session('search.key')->redirection('reset');

你可以通过以下方式访问搜索属性

session('search.key')->attribute('text');

模型

Searchable 特性添加到你的模型中

use Nh\Searchable\Traits\Searchable;

use Searchable;

然后你可以设置要搜索的列: 你也可以设置一些关系列,如 'relation.column'

/**
 * The searchable columns.
 *
 * @var array
 */
protected $searchable = [
  'title', 'subtitle', 'description', 'author.firstname'
];

然后你可以进行搜索查询: 搜索可以是 'contains','start' 或 'end' 你可以通过设置 true/false 来决定是否所有列都匹配

Post::search('my keyword','contains',false)->get();

你还可以在两个值之间进行搜索: 默认值是 0 到 99999999999999999999

Post::searchBetween('mycolumn',10,100)->get();    // Retrieve where between 10 and 100
Post::searchBetween('mycolumn',null,100)->get();  // Retrieve where under or equal 100
Post::searchBetween('mycolumn',100,null)->get();  // Retrieve where greater or equal than 100
Post::searchBetween('mycolumn',0,0)->get();       // Retrieve where is 0 or null

路由

你可以通过访问路由 searchable.reset 来重置搜索会话

route('searchable.reset', ['key' => 'key'])