Laravel Search Filter page on GitHub
in your controller instead of use routine method like :
$flight = App\Flight::pageination();
//Or
$flight = App\Flight::with('captain')->pageination();
//Or
$flight = App\Flight::where('active', 1)->pageination();
//Or
$flight = App\Flight::with('captain')->where('active', 1)->all();
//Or
$flight = App\Flight::with('captain')->where('active', 1)->get();
//Or
$flight = App\Flight::with('captain')->where('active', 1)->pageination();
With this class you can parsing get url and using one line code for fetching data with Eloquent and filtered data.
$flight = App\SearchFilter::apply( $request, new Flight, 'all', 'captain' );
Request(Required) : Illuminate\Http\Request $request; Any request laravel can supported like Get, Post, Put, etc. But for using search and filters using Get method !
Model(Required) : Illuminate\Database\Eloquent\Model; model should be extened of Eloquent Model. and just passing to function not more!
Query Type : is String method or can be NULL.
- all : Get All Data
- get : Get Data
- pageination : Get Data With Pageination
Relationships : When you need use Eloquent Relation in your query can send by this arg. this arg like Main scopeWith can parsing array.
$relation = 'role';
//or
$relation = ['role','access'];
in directory "Filters" you can add new filter class.new filter class should be implements Filter and use Eloquent Builder for using functions related. also if you need filter like father_name in your new filter class name is FatherName, under line removed and first character is upper.
for example :
namespace App\SearchFilters\Filters;
use Illuminate\Database\Eloquent\Builder;
class NewFilter implements Filter{
/**
* Apply a given search value to the builder instance.
*
* @param Builder $builder
* @param mixed $value
* @return Builder $builder
*/
public static function apply(Builder $builder, $value){
return $builder->where('new_filter', "LIKE", "%".$value."%" );
}
}
For Pass Custom Request to Class, you can using merge function in Request Class.
and just pass array with merge function to request :)
$request->merge([
"order_by" => "name",
"order" => "desc"
]);