function filters() { $filter_types = ['type' => 'type', 'commercial' => 'type', 'sea_dist' => 'range', 'price' => 'range', 'district_id' => 'type', 'town_id' => 'type', 'house_area' => 'range', 'rooms' => 'range', 'yard_area' => 'range', 'period' => 'type', 'pool' => 'check', 'producer' => 'list']; $take = 10; $sort = 'title'; $order = 'asc'; $filters = 'house_area=120;380&district_id=2&town_id=3&pool=bool&producer=[asus;acer;lenovo;toshiba;sony]&price=10000;160000&yard_area=100;800&commercial=rent&period=daily&type=cottage&rooms=3;7'; // $query = Estate::join('districts', 'estates.district_id', '=', 'districts.district_id')->join('towns', 'towns.town_id', '=', 'districts.town_id'); // get Illuminate\Database\Eloquent\Builder $query = Estate::joined(); // get Illuminate\Database\Eloquent\Builder $query = apply_filters($query, $filters); // $query = Filter::apply($query, $filters); $query = $query->orderBy($sort, $order); try { $estates = $query->skip($skip)->take($take)->get(); } catch (Exception $e) { return redirect()->back(); } }