Laravel在两个数字之间搜索

时间:2018-12-31 03:04:34

标签: php laravel laravel-5 laravel-blade

我目前在搜索控制器中具有以下功能。我还想检索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'));

预先感谢, 杰米

6 个答案:

答案 0 :(得分:1)

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

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

因此,出于安全原因,您无需与框架争用并使用该功能。

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

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

答案 1 :(得分: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'));

答案 2 :(得分: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'));

答案 3 :(得分:0)

可能您需要类似 whereBetween()之类的东西。

from sshtunnel import SSHTunnelForwarder
import pymongo
import pprint

MONGO_HOST = "REMOTE_IP_ADDRESS"
MONGO_DB = "DATABASE_NAME"
MONGO_USER = "LOGIN"
MONGO_PASS = "PASSWORD"

server = SSHTunnelForwarder(
MONGO_HOST,
ssh_username=MONGO_USER,
ssh_password=MONGO_PASS,
remote_bind_address=('127.0.0.1', 27017)
)

server.start()

client = pymongo.MongoClient('127.0.0.1', server.local_bind_port) # 
server.local_bind_port is assigned local port
db = client[MONGO_DB]

在每种情况下,如果用户未选择任何值,则将发送$spaces = \App\Space::where(['space_town', 'LIKE', '%' . $town . '%'], ->whereBetween('price', [$min_price, $max_price]) ->get(); min_price,无论如何您将发布默认值。以便在该值内获取结果。

答案 4 :(得分: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]

答案 5 :(得分:0)

首先,您需要在使用MySQL的最大值和最小值之间将其设置为0。如果用户未输入最小值最大值,则将其搜索为默认值0

选择*从价格在10到20之间的产品