использование массива в условии where в laravel

#php #mysql #laravel

#php #mysql #laravel

Вопрос:

Я использую laravel 6.Я хочу использовать ограничение по времени из своего расписания. ограничивающими переменными являются массив с несколькими строковыми данными.

 $bus = BusSchedule::where([
           ['datetime', '>=', $start_datetime],
           ['datetime', '<=', $end_datetime]
     ])
    ->get()
    ->pluck('course_id')
    ->toArray();
  

в переменных start_datetime и end_datetime у меня есть несколько значений даты и времени, например [‘2020-12-12 16:05:00′ ,’2020-12-11 13:05:00’]

так и должно быть . start_datetime и end_datetime — это динамический массив, введенный пользователем

 $bus = BusSchedule::where([
           ['datetime', '>=', ['2020-12-12 16:05:00' ,'2020-12-11 13:05:00']],
           ['datetime', '<=', ['2020-12-12 18:05:00' ,'2020-12-11 15:05:00']]
     ])
    ->get()
    ->pluck('course_id')
    ->toArray();
  

но я получаю значение первого индекса массива, другие не работают

Комментарии:

1. получая значение первого индекса массива, другие не работают

2. Зачем вам делать это с датами ?! для ‘>=’ вы можете использовать только минимальное значение DateTime в вашем массиве datetimes, потому что это то, о чем вы заботитесь, а для ‘<=’ вы можете использовать максимальное

Ответ №1:

Я думаю, что с датами и ‘>=’ или ‘<=’ вы можете просто использовать min / max входного массива. Поскольку вас не интересуют точные промежуточные значения, вам просто нужен диапазон, особенно если вы хотите перечислить все результаты между выбранными пользователем датами.

таким образом, ваш код будет выглядеть примерно так:

 $bus = BusSchedule::whereBetween('datetime', [
       min(Carbon::create('2020-12-12 18:05:00') ,Carbon::create('2020-12-11 15:05:00')),
       max(Carbon::create('2020-12-12 16:05:00') ,Carbon::create('2020-12-11 13:05:00'))
 ])
->get()
->pluck('course_id')
->toArray();
  

если вам нужны только результаты, соответствующие всем датам, как если бы вы выполняли несколько where для каждого значения, вы можете использовать между max(start_dates) и min(end_dates)

Но если вы хотите получить какой-либо результат, который находится между этими выбранными датами, которые вы используете между min(start_dates) и max(end_dates).

Это будет включать все параметры

Когда вам нужны точные значения, вы можете использовать whereIn

Для получения дополнительной информации о выборе в laravel: https://laravel.com/docs/6.x/queries#selects

Для получения дополнительной информации о min в Carbon: https://carbon.nesbot.com/docs/#api-comparison