Laravel Поиск между двумя числами - PullRequest
0 голосов
/ 31 декабря 2018

У меня в настоящее время есть следующая функция в моем контроллере поиска.Я также хочу получить результаты, где 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 голосов
/ 31 декабря 2018

Сначала вам нужно установить максимальное и минимальное значение равным 0, между которыми используется MySQL.Если пользователь не введет минимальное максимальное значение, он будет использоваться в качестве значения по умолчанию 0

ВЫБРАТЬ * ИЗ ПРОДУКТОВ, ГДЕ ЦЕНА МЕЖДУ 10 И 20

0 голосов
/ 31 декабря 2018

Лучший способ - использовать условие 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'));
0 голосов
/ 31 декабря 2018

Если вы используете Laravel 5.7.19 и выше

по умолчанию laravel Корабли с функцией, названной whereBetween

, будут работать с коллекцией

Iсослались на пост @ 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]

0 голосов
/ 31 декабря 2018

Может быть, вам нужно что-то вроде гдеBetween () .

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

В каждом случае вы будете отправлять min_price и max_price, если пользователь не выбирает какое-либо значение, вы все равно будете публиковать значения по умолчанию.так что он выбирает результат в пределах этих значений.

0 голосов
/ 31 декабря 2018

Вы должны попробовать что-то вроде этого.Это не может быть точным решением, но примите это как справку.

0 голосов
/ 31 декабря 2018

Итак, во-первых, когда вы используете Laravel, не используйте параметры GET напрямую, а вызывайте их через структуру.

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

Таким образом, вы не боретесь с платформой и не работаете с этими функциями по соображениям безопасности.

Поэтому, когда вам нужно значение по умолчанию, вы можете определить значение с помощью оператора сокращения или оператора if.

В своем запросе используйте > и < в своем запросе.Поэтому добавьте эти поля в ваш массив и определите, какое поле должно быть больше, а какое - меньше.

...