之前在做管理後臺開發,很多地方需要從前端搜尋表單檢索資料表中的資料,剛開始都是用request()->get('key')
的方式獲取搜尋表單的欄位,然後再呼叫Model
查詢資料,後來感覺,在laravel這麼優雅的框架中用這麼low的方法檢索資料實在low炸天 :joy:
所以開始在網上搜尋各種擴充套件包,找到了一個擴充套件包 tom-lingham/searchy
github地址
試用了一下,感覺太麻煩了,乾脆自己擼個擴充套件包算了
花了一天時間弄了一個初版的,功能不多,目前滿足所需,以後再慢慢加功能
github地址
安裝
composer require tanmo/laravel-search
使用
- 在Model中引入
Tanmo\Search\Traits\Search
Trait
<?php
use Tanmo\Search\Traits\Search;
...
class User extends Model
{
use Search;
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
- 使用Facade建立搜尋器
<?php
use Tanmo\Search\Query\Searcher;
use Tanmo\Search\Facades\Search;
...
class UserController extends Controller
{
public function index()
{
$searcher = Search::build(function (Searcher $searcher) {
$searcher->equal('username');
$searcher->like('realname');
});
$users = (new User())->search($searcher)->paginate(10);
}
}
- 支援的方法
$searcher->equal($field, $formField = null)
$searcher->neq($field, $formField = null)
$searcher->between($field, $formField = null)
$searcher->notBetween($field, $formField = null)
$searcher->like($field, $formField = null)
$searcher->lt($field, $formField = null)
$searcher->gt($field, $formField = null)
$searcher->in($field, $formField = null)
$searcher->notIn($field, $formField = null)
$searcher->gte($field, $formField = null)
$searcher->lte($field, $formField = null)
$formField
引數是用來繫結form表單欄位的name
屬性的,如果name
屬性與資料表欄位一致,則該引數可以忽略- 如果要搜尋關聯表
roles
下的name
欄位的話,可以這樣用$searcher->equal('roles.name', 'role_name')
,第二個引數必填
本作品採用《CC 協議》,轉載必須註明作者和本文連結