資料檢索擴充套件包

黑將軍發表於2018-04-03

之前在做管理後臺開發,很多地方需要從前端搜尋表單檢索資料表中的資料,剛開始都是用
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 協議》,轉載必須註明作者和本文連結

黑將軍(Tanmo)

相關文章