Price Slider Rangeの絞り込み問題
ControllerでDBのデータをFetchして、Bladeで絞り込みしていますが、Price Sliderはしっかり動いていません。販売価格を絞り込んだ時、絞り込んだ範囲以外の価格のデータも表示されてしまいます。これはなぜでしょうか。この問題はどうすればいいでしょうか。
Controller:
public function search(Request $request)
{
$q = $request->q;
$sortbyprice = $request->sortbyprice;
$region = $request->region;
$rooms = $request->rooms;
$price = $request->price;
$max = $request->input('max');
$min = $request->input('min');
$paginationData = [
'q' => $q
];
$estates = \DB::table('allestates')
->where('lat', '!=', '')
->where('lng', '!=', '')
->where('price', '!=', '')
->when($q, function($query, $q) use ($paginationData) {
$paginationData['q'] = $q;
return $query->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 . "%");
})
->when($max, function($query, $max) use ($min, $paginationData) {
$paginationData['min'] = $min;
$paginationData['max'] = $max;
return $query->whereBetween('price', [$min, $max]);
})
// ->toSql()
->paginate(100);
上のコードのように、MinとMaxのインプットをRequestしています。
JSコードは下記の通りです。
var $slider = $('#range').get(0);
var $min = $('#min');
var $max = $('#max');
var minVal = 0;
var maxVal = 10000;
var gap = 5;
noUiSlider.create($slider, {
start: [ minVal - gap, maxVal + gap ],
connect: true,
step: gap,
range: {
'min': minVal - gap,
'max': maxVal + gap
},
pips: {
mode: 'range',
density: gap
}
});
$slider.noUiSlider.on('update', function( values, handle ) {
var value = Math.floor(values[handle]);
if ( handle ) {
$max.get(0).value = value;
} else {
$min.get(0).value = value;
}
$('.noUi-value-large').text(minVal);
$('.noUi-value-large:last-child').text(maxVal);
if ( $min.get(0).value <= minVal || $min.get(0).value > maxVal ){
$min.val('');
}
if ( $max.get(0).value <= minVal || $max.get(0).value > maxVal ){
$max.val('');
}
});
$min.get(0).addEventListener('change', function(){
$slider.noUiSlider.set([this.value, null]);
});
$max.get(0).addEventListener('change', function(){
$slider.noUiSlider.set([null, this.value]);
});
ですが、例えば、3000から5000までで絞り込んだ時、5000以上の価格からのものも表示されてしまいます。絞り込んだ範囲を価格だけを正しく表示することができません。Rowのデータの形は「4,290万円〜9,490万円」です。
Rowの表示の仕方の問題でしょうか。JSでそれをどうやって直すことができますか?