搜索表单效果很好。当我使用一个基本上允许一个人根据特定学费价格找到学校的特定过滤器时,搜索过滤器会获取搜索结果并对其进行更多过滤效果很好。
学费价格在范围内输入数据库。例如:" 20,000-30,000"将是在列单元格中可以找到的东西。该列使用VARCHAR数据类型。
这是该特定过滤器的代码:
HTML
<input name="fees" type="range" min="1" max="200000" value="" class="slider" id="myRange">
PHP
->where('fees', '<', '%'.$fees.'%')
如果一个人搜索10000,那么该字段的数据少于10000的任何学校都应该出现。
数据库中有200多所学校,但无论我在过滤器中搜索什么,0结果显示。有什么想法吗?
答案 0 :(得分:0)
如果你可以在数据库中添加额外的列(我怀疑它),只需从数据范围中添加最少的数字并使用相同的查询;只是没有%
->where('feesNewCol', '<', $fees)
如果没有,你可以:
为您的where查询添加一个闭包,如下所示:
->where(function ($query) use ($fees) {
$schools = $query->pluck('feeRange', 'schoolName');
foreach ($schools as $feeRange => $schoolName) {
((explode('-',$feeRange))[0] < $fees) ? echo $schoolName : Break;
}
})
当然这不是一个可行的解决方案,因为它在查询中有一个if循环,但这是由于约束。
您可以添加一个滑块过滤器,将当前图形传输到可在VARCHAR列中搜索的选项。
在html中添加一个隐藏的输入字段,以接收您将在数据库中匹配的选项编号。
<input type="hidden" value='' id='feesOptions'>
<script>
var feesOptions = (document.getElementById("feesOptions").value;
var fees = (document.getElementById("fees").value;
feesOptions = fees;
document.getElementById("fees").addEventListener("mousemove", function(event) {
fees != feesOptions ? myFunction(event) : false;
});
function myFunction(e) {
var x = 0;
switch (true) { // list all your options
case (x > 10000 && x =< 20000):
x = '10,000-20,000';
break;
case (x > 20000 && x =< 50000):
x = '20,000-50,000';
break;
}
feesOptions = x;
}
</script>
最后,收到feesOptions输入并用它查询。