nh / searchable
使模型可搜索并保持搜索会话
1.1.7
2023-01-19 12:57 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'])