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"
    ]);