DB'den cektigim datalari blade'de filtreliyorum. Fakat bu konu hakkinda iki tane sorum/sorun var.
Ornegin filtremele icin Area:Tokyo'yu sectigimde calisiyor. Fakat hemen ardindan baska bir filtre kullandigimda
mesela Rooms:2LDK, tekrar filtreliyorum, ancak bunu ilk filtrenin uzerine degil(ilk filtreyi yok sayip) en bastan butun area'lari da
kullanarak yapiyor.
Blade'de kullandigim selectBox su sekilde.
<form>
{{csrf_field()}}
<select name="region" onchange="this.form.submit();">
<option>Area</option>
<option value="関西">関西</option>
<option value="北海道">北海道</option>
<option value="東北">東北</option>
<option value="東海">東海</option>
<option value="九州">九州</option>
<option value="四国">四国</option>
<option value="中国">中国</option>
</select>
</form>
<form>
{{csrf_field()}}
<select name="rooms" onchange="this.form.submit();">
<option value="1LDK">1LDK</option>
<option value="2LDK">2LDK</option>
<option value="3LDK">3LDK</option>
</select>
</select>
</form>
Iki form'u birlestirip denedigimde filtre calismaz?
ikinci sorum ise, filtreleme islemine bir de "price range slider" eklemek istiyorum.
Bunun icin Controller'a "whereBetween" ekledim, fakat bunun blade tarafi tam olarak nasil olmali?
Controller
public function search(Request $request)
{
$q = $request->q;
$sortbyprice = $request->sortbyprice;
$region = $request->region;
$rooms = $request->rooms;
$price = $request->price;
$paginationData = [
'q' => $q
];
$estates = \DB::table('allestates')
->where('lat', '!=', '')
->where('lng', '!=', '')
->where('price', '!=', '')
->where(function($query) use ($q) {
$query->where("building_name", "LIKE", "%" . $q . "%")
->orWhere("address", "LIKE", "%" . $q . "%")
->orWhere("company_name", "LIKE", "%" . $q . "%")
->orWhere("region", "LIKE", "%" . $q . "%")
->orWhere("rooms", "LIKE", "%" . $q . "%");
})
->when($sortbyprice, function($query, $order) use ($paginationData) {
if(!in_array($order, ['asc','desc'])) {
$order = 'asc';
}
$paginationData['sortbyprice'] = $order;
return $query->orderBy('price', $order);
}, function($query) {
return $query->orderBy('price');
})
->when($region, function($query, $regionId) use ($paginationData) {
$paginationData['region'] = $regionId;
return $query->where('region', $regionId);
})
->when($rooms, function($query, $roomsId) use ($paginationData) {
$paginationData['rooms'] = $roomsId;
return $query->where('rooms', "LIKE", "%" . $roomsId . "%");
})
->whereBetween('price',
[$request->input('min'), $request->input('max')])
->paginate(100);
$paginationData = array_filter($paginationData);
return view("home", compact('estates', 'q','paginationData'));
}
blade, slider
<p>Price Range</p>
<section class="range-slider">
<span class="rangeValues"></span>
<input value="500" min="500" max="50000" step="500" type="range">
<input value="50000" min="500" max="50000" step="500" type="range">
</section>