odoku/eloquent-searcher
赋予Eloquent搜索能力。
1.1
2017-03-01 07:19 UTC
Requires
- php: >=7.0
- illuminate/database: ~5.3.0|~5.4.0
- illuminate/support: ~5.3.0|~5.4.0
Requires (Dev)
- orchestra/testbench: ~3.3.0|~3.4.0
- phpunit/phpunit: ^5.0
This package is not auto-updated.
Last update: 2024-09-18 20:21:53 UTC
README
使用方法
创建搜索类。
namespace App\Searchers; use EloquentSearcher\Searcher; class UserSearcher extends Searcher { protected $searchFields = [ 'group.name' => Searcher::EQUALS, 'name' => Searcher::CONTAINS, 'is_active' => Searcher::IS_TRUE, 'created_at' => Searcher::DATE_RANGE, 'project' => 'searchProject', ]; protected $keywordFields = [ 'group.name' => Searcher::EQUALS, 'name' => Searcher::CONTAINS, 'notes' => Searcher::CONTAINS, ]; protected function searchProject($query, $field, $value) { return $query->whereHas('projects', function ($query) use ($value) { return $query->where('projects', $value); }); } }
将搜索特质实现到你的模型中。
namespace App\Models; use EloquentSearcher\SearchableTrait; use Illuminate\Database\Eloquent\Model; use App\Searchers\UserSearcher; class User extends Model { use SearchableTrait; protected $searcher = UserSearcher::class; protected $table = 'users'; public $timestamps = true; protected $fillable = [ 'name', 'is_active', 'notes', ]; protected $guarded = []; public function group() { return $this->belongsTo(Group::class); } public function projects() { return $this->hasMany(Project::class); } }
然后使用它。
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller { public function index(Request $request) { $conditions = $request->all(); // $conditions = [ // 'keyword' => 'programmer', // 'group' => [ // 'name' => 'Employee', // ], // 'name' => 'James', // 'project' => 'Impressive Project', // 'is_active' => true, // 'created_at' => [ // 'from' => '2016-01-01', // 'until' => '2016-12-31', // ], // ]; $users = User::search($conditions); return view('index', ['users' => $users]); } }
内置规则
- Searcher::EQUALS
- Searcher::CONTAINS
- Searcher::STARTSWITH
- Searcher::ENDSWITH
- Searcher::GT
- Searcher::GTE
- Searcher::LT
- Searcher::LTE
- Searcher::RANGE
- Searcher::DATE_RANGE
- Searcher::DATETIME_RANGE
- Searcher::IN
- Searcher::IS_NULL
- Searcher::IS_NOT_NULL
- Searcher::IS_TRUE
- Searcher::IS_NOT_TRUE
- Searcher::IS_FALSE
- Searcher::IS_NOT_FALSE