Laravel php найти номер в корпусе переключателя - PullRequest
0 голосов
/ 05 февраля 2020

Пользовательский ввод может быть двумя значениями, от x до y Теперь я хочу искать между пользовательскими записями.

Например, пользовательский ввод:

из 55 на 90

Сейчас в html выберите вот так:

<select>
  <option value="1">From 5 to 50</option>
  <option value="2">From 50 to 85</option>
  <option value="3">From 85to 110</option>
</select>

И в контроллере:

if($request->meter){
switch ($request->meter) {
case 1:
    $query->where([
        ['meterfrom', '>=', '5'],
        ['meterto', '<=', '50']
    ]);
    break;
case 2:
    $query->where([
        ['meterfrom', '>=', '50'],
        ['meterto', '<=', '85']
    ]);
    break;
}
case 3:
    $query->where([
        ['meterfrom', '>=', '85'],
        ['meterto', '<=', '110']
    ]);
    break;
}
}

По этому вводу пользователя мой поиск возвращает ничего, кроме тех пользователей, у которых есть данные, такие как (5-50) или (50-85) или (85-110), если пользователь, отправляющий запись с помощью (55-90) поиска, не может найти его, возможно, из-за моего случая переключения, но Мне интересно, как это решить? Любая идея или новая логика c, чтобы передать это?


Редактировать: В этом случае с счетчиком площади дома, пользователь может ввести форму х метр, у у метр, например, 55 метр до 90 метров, верно? теперь впереди, у меня есть страница поиска, вы видите опцию выбора, я хочу искать дом, например, от 5 до 50 метров или et c .. но один из пользователей ввел 55 до 90, но поиск по этой логи c не могу его найти.

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

В этом случае для счетчика площади дома пользователь может ввести форму от x метра до y метра, например, от 55 метра до 90 метров, верно? теперь впереди, у меня есть страница поиска, вы видите опцию выбора, я хочу искать дом, например, от 5 до 50 метров или et c .. но один из пользователей ввел 55 до 90, но поиск по этой логике c не могу найти его.

Я думаю, вам не нужна опция выбора. Просто введите поля X и Y. Просто запросите, как показано ниже

$query->where([
        ['meterfrom', '>=', X],
        ['meterto', '<=', Y]
]);

Вам просто нужно передать параметры X и Y в контроллер

ИЛИ

Если опция выбора не установлена МНОЖЕСТВО ВЫБОР ОПЦИИ

Затем вы можете перейти к контроллеру, например: selection = 2,3 // принять в качестве строки

Определить массивы в контроллере

protected $restriction = [
        1 => [
            'x' => 5,
            'y' => 50
        ],
        2 => [
            'x' => 50,
            'y' => 85
        ],
        3 => [
            'x' => 85,
            'y' => 110
        ]
    ];

Затем в вашей функции используйте коллекцию для фильтрации на основе ввода выбора

//find 2,3 from the $restriction array
$options = collect($restriction)->filter(function($value, $key) {
     return in_array($key, explode(',', $this->selection)); //2,3
})->toArray();

//query based on options filtered
$query->where('meterFrom', current($options)['x'])
     ->where('meterto', end($options)['y']);
1 голос
/ 05 февраля 2020

Существует решение, если вы все еще хотите использовать опцию выбора, вы можете использовать две опции выбора, как показано ниже:

<select name="MeterFrom">
  <option value="5">5</option>
  <option value="50">50</option> <!-- select this -->
  <option value="85">85</option>
  <option value="110">110</option>
</select>

<select name="MeterTo">
  <option value="5">5</option>
  <option value="50">50</option>
  <option value="85">85</option>
  <option value="110">110</option> <!-- and this -->
</select>

Теперь для поиска 55 to 90 вам следует выбрать option 2 из MeterFrom выберите option 4 из MeterTo

И в вашем контроллере:

$query->where([
    ['meterfrom', '>=', $request->meterfrom],
    ['meterto', '<=', $request->meterto]
]);

На самом деле вам не нужно использовать switch case в этом случае !

1 голос
/ 05 февраля 2020

Вы можете написать еще условие,

if ($request->meter) {
    switch ($request->meter) {
        case 1:
            $query->where([
                ['meterfrom', '>=', '5'],
                ['meterto', '<=', '50'],
            ]);
            break;
        case 2:
            $query->where([
                ['meterfrom', '>=', '50'],
                ['meterto', '<=', '85'],
            ]);
            break;
        case 3:
            $query->where([
                ['meterfrom', '>=', '85'],
                ['meterto', '<=', '110'],
            ]);
            break;
        default:
            break;
    }
} else {
    $query->where([
        ['meterfrom', '>=', $request->x], // I hope x and y are request parameters you are getting
        ['meterto', '<=', $request->y],
    ]);
}

ИЛИ переключиться само, если не выполнено условие,

switch ($request->meter) {
    case 1:
        $query->where([
            ['meterfrom', '>=', '5'],
            ['meterto', '<=', '50'],
        ]);
        break;
    case 2:
        $query->where([
            ['meterfrom', '>=', '50'],
            ['meterto', '<=', '85'],
        ]);
        break;
    case 3:
        $query->where([
            ['meterfrom', '>=', '85'],
            ['meterto', '<=', '110'],
        ]);
        break;
    default: // this if no condition met then go to default case
        $query->where([
            ['meterfrom', '>=', $request->x],
            ['meterto', '<=', $request->y],
        ]);
        break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...