Laravel在两个数字之间搜索

问题描述 投票:-1回答:6

我目前在我的搜索控制器中有以下功能。我还想检索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 laravel laravel-5 laravel-blade
6个回答
1
投票

最好的方法是使用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'));

1
投票

因此,首先使用Laravel时不要直接使用GET参数,而是通过框架调用它们。

$min = $request->input('min');

因此,出于安全原因,您不会与框架作斗争并使用这些功能。

因此,当您需要默认值时,可以使用short hand运算符或if语句定义值。

使用您的查询在查询中使用><。因此,将字段附加到数组中,并定义哪个字段应该更大,哪个字段应该更小。


0
投票

可能你需要像whereBetween()这样的东西。

$spaces = \App\Space::where(['space_town', 'LIKE', '%' . $town . '%'],
    ->whereBetween('price', [$min_price, $max_price])
    ->get();

在任何情况下,如果用户没有选择任何值,您将发送min_pricemax_price,无论如何您将发布默认值。这样它就可以在该值中获取结果。


0
投票

首先,您需要将max和min值设置为0,使用MySQL之间。如果用户没有输入最小值,则它将搜索为默认值0

SELECT * FROM产品价格在10和20之间


0
投票

你必须尝试这样的事情。这可能不是确切的解决方案,但可以作为参考。

$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'));

0
投票

如果您使用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()
);

适合全文[https://laravel-news.com/laravel-5-7-19][ClickHere]

© www.soinside.com 2019 - 2024. All rights reserved.