Как сделать запрос базы данных для каждого дня в массиве дней Laravel - PullRequest
2 голосов
/ 02 ноября 2019

У меня есть массив дней, которые я хочу запрашивать у моей модели для каждой даты, которая у меня есть в этом массиве, это может быть возможно с помощью цикла for и индекса, но, как правило, я не хочу делать запросы внутри циклатак что есть какая-то другая возможность проверить дату в моей модели, поэтому мой проверенный цикл for выглядит следующим образом:

$period = CarbonPeriod::create($from_date, $to_date);
$dates = $period->toArray();
// and here l am looping the days :
for ($t = 0; $t < count($dates); $t++) {
    $room_capacity = Capacity::with('Hotel')
        ->where('room_id', $room_ids[$i])
        ->whereDate('from_date', '<=', $dates[$t])
        ->whereDate('to_date', '>=', $dates[$t])
        ->get()->sortBy('created_at');
}

Я хочу знать, есть ли способ оптимизировать приведенный выше код, чтобы не записывать еговнутри петли. спасибо

1 Ответ

3 голосов
/ 02 ноября 2019

Условие room_id сохраняется в цикле, и вы перебираете даты. Поэтому, возможно, вы можете использовать «или условие» для дат, что-то вроде этого:

$room_capacity = Capacity::with('Hotel')
    ->where('room_id', $room_ids[$i])
    ->where(function (Builder $query) use ($dates) {
        for ($t = 0; $t < count($dates); $t++) {
            $date = $dates[$t];
            $query->orWhere(function (Builder $query) use ($date) {
                $query->whereDate('from_date', '<=', $date)
                    ->whereDate('to_date', '>=', $date);
            });
        }
    })->get()->sortBy('created_at');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...