我目前在我的搜索控制器中有以下功能。我还想检索space_price在用户最小和最大输入之间的结果。我还希望查询在用户没有输入最小值或最大值时工作,或者如果他们输入最大值而没有最小值,它将返回0和最大值之间的结果。
$town = $_GET['town'];
$category = $_GET['category'];
$min = $_GET['min'];
$max = $_GET['max'];
$spaces = \App\Space::where([
['space_town', 'LIKE', '%' . $town . '%'],
['space_category', 'LIKE', '%' . $category . '%'],
])->get();
return view('search', compact('spaces'));
先谢谢,杰米
最好的方法是使用PHP条件来检查是否给出了最大值和最小值。所以最终的代码看起来像这样:
$town = $_GET['town'];
$category = $_GET['category'];
$min = empty($request->input('min')) ? 0 : $request->input('min');
$max = empty($request->input('max')) ? 0 : $request->input('max');
$query = \App\Space::where([
['space_town', 'LIKE', '%' . $town . '%'],
['space_category', 'LIKE', '%' . $category . '%'],]);
// check if any of max or min value is given
if($min!=0 || $max!=0 ){
$query = $query->whereBetween('space_price', array($min, $max));
}
$spaces = $query->get();
return view('search', compact('spaces'));
因此,首先使用Laravel时不要直接使用GET参数,而是通过框架调用它们。
$min = $request->input('min');
因此,出于安全原因,您不会与框架作斗争并使用这些功能。
因此,当您需要默认值时,可以使用short hand运算符或if语句定义值。
使用您的查询在查询中使用>
和<
。因此,将字段附加到数组中,并定义哪个字段应该更大,哪个字段应该更小。
可能你需要像whereBetween()这样的东西。
$spaces = \App\Space::where(['space_town', 'LIKE', '%' . $town . '%'],
->whereBetween('price', [$min_price, $max_price])
->get();
在任何情况下,如果用户没有选择任何值,您将发送min_price
和max_price
,无论如何您将发布默认值。这样它就可以在该值中获取结果。
首先,您需要将max和min值设置为0,使用MySQL之间。如果用户没有输入最小值,则它将搜索为默认值0
SELECT * FROM产品价格在10和20之间
你必须尝试这样的事情。这可能不是确切的解决方案,但可以作为参考。
$town = $request->get('town');
$category = $request->get('category');
$min = $request->get('min');
$max = $request->get('max');
$query = \App\Space::where([
['space_town', 'LIKE', '%' . $town . '%'],
['space_category', 'LIKE', '%' . $category . '%'],
]);
//When only max value is provided , so min value considered 0
if ($request->has('max') && !$request->has('min')) {
$query->whereBetween('space_price',[0,$max]);
}
//When min and max both values provided
if ($request->has('max') && $request->has('min')) {
$query->whereBetween('space_price',[$min,$max]);
}
$space = $query->get();
return view('search', compact('spaces'));
如果您使用Laravel 5.7.19
及更高版本
默认情况下laravel使用名为whereBetween
的函数发送
它将适用于该集合
我已经提到了@ https://laravel-news.com/laravel-5-7-19
的帖子
$c = new Collection([
['v' => 1],
['v' => 2],
['v' => 3],
['v' => '3'],
['v' => 4]
]);
$this->assertEquals(
[
['v' => 2],
['v' => 3],
['v' => '3'],
['v' => 4]
],
$c->whereBetween('v', [2, 4])->values()->all()
);