Как создать фильтрацию, используя оператор SQL PHP Laravel? - PullRequest
2 голосов
/ 21 февраля 2020

У меня есть одна таблица с именем Package. В настоящее время я хочу отфильтровать таблицу на самом деле. Допустим, пользователь вставляет значения в переменную, например, от = 2/3/2020 до = 10/3/2020. Затем он будет рассчитан внутри моей кодировки и получит продолжительность дней, в результате noOfdays = 8 дней. Таким образом, из продолжительности будет определено, к каким пакетам он принадлежит в течение 8 дней.

вычисление дней:

        $today = Carbon::now();

        $dt1 = Carbon::createFromFormat('d/m/Y',$departure);
        $dt2 = Carbon::createFromFormat('d/m/Y',$arrival);

        $noOfDays = $dt1->diffInDays($dt2);

Расчет не имеет ошибки, которая при dd ($ noOfDays) приведет к = 8 дням.

SQL оператор:

            $packages = Package::where([
                ['id', '=', $plan],
                ['from', '<=', $noOfDays, 'AND', 'to', '>=', $noOfDays],
            ])
            ->get();

Таблица пакетов: Package Table

Часть ошибки: при фильтрации она получит Пакет 1 и пакет 2. Предполагается, что он получит только пакет 2. Я думаю, что-то не так где-то около оператора SQL. Кто-нибудь, кто в этой ситуации раньше? потому что логически я думаю, что часть SQL уже верна. Но зачем его фильтровать и получать пакет 1?

Ответы [ 3 ]

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

Вы должны разделить два предложения where, чтобы получить то, что вы хотели, вот так.

 $packages = Package::where([
     ['id', '=', $plan], 
     ['from', '<=', $noOfDays], 
     ['to', '>=', $noOfDays]
            ])
 ->get();

Чтобы быть более читабельным, хорошо, если ваш код выглядит так

 $packages = Package::where('id', $plan)
            ->where('from', '<=', $noOfDays)
            ->where('to', '>=', $noOfDays)
            ->get();
0 голосов
/ 21 февраля 2020

попробуйте

 $packages = Package::where('id', $plan)
            ->where('from', '<=', $noOfDays)
            ->where('to', '>=', $noOfDays)
            ->get();
0 голосов
/ 21 февраля 2020

Измените свое второе где утверждение. Где в предложении всегда используется ADN, если вы не используете orWhere или вкладываете его в функцию.

['id', '=', $plan], 
['from', '<=', $noOfDays], 
['to', '>=', $noOfDays]

4-й параметр, который вы передаете как AND, не используется так, как вы ожидаете на работу.

В результате чего package1 будет включен в ваш вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...