Разумно ли называть ваше собственное приложение API в контроллере в цикле? - PullRequest
0 голосов
/ 07 ноября 2019

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

  $from_date = $request->get('from_date');
  $to_date = $request->get('to_date');
  $room_ids[] = $request->get('room_ids');

  $period = CarbonPeriod::create($from_date, $to_date);
  $dates = $period->toArray();

        for ($i = 0; $i < count($dates); $i++) {

            for ($f = 0; $f < count($room_ids); $f++) {

                /****************************************
                 * Looping for the Number of Rooms User Given
                 *****************************************/
                $room_price = RoomPricingHistory::with('accommodationRoom', 'accommodationRoom.roomCapacityHistoryLast')
                    ->where('accommodation_room_id', $room_ids[$i])
                    ->whereDate('from_date', '<=', $dates[$f])
                    ->whereDate('to_date', '>=', $dates[$f])
                    ->get()->sortBy('created_at');
                var_dump('time');

                $data_array[] = $room_price[$i];
                $data_collection = collect($data_array);

                $sum_price[] = $room_price[$i]->sales_price; // trying to get and store data not to be replaced after each step of loop
                $sum_half_board[] = $room_price[$i]->half_charge_price;
                $sum_full_board[] = $room_price[$i]->full_board_price;
            }
        }
        foreach ($room_price as $item) {
            if ($item->accommodationRoom->roomCapacityHistoryLast->capacity > 10 ?? null) {
                $check_capacity = 0;
            } else {
                $check_capacity = 1;
            }
        }
        $night_count = count($dates);
        $sum = array_sum($sum_price);
        $sum_half = array_sum($sum_half_board);
        $sum_full = array_sum($sum_full_board);

        $alldata = $sum . ',' . $sum_half . ',' . $sum_full . ',' . $night_count . ',' . $check_capacity;
        return RoomDetailResource::collection($data_collection)->sum($alldata);

Я получаю эту ошибку:

  "message": "Undefined offset: 1",
    "status_code": 500,

Я думаю, что это потому, что 1 цикл выполняется более одного раза, теперь мой вопрос заключается в вызове, я делаю 1 для и сделать из него API, а затем в другом вызове функции, которыйAPI в цикле и получить результат ??

Разумно ли это делать, или мы не можем назвать наш собственный API в нашем собственном проекте?

или есть ли способ решить эту ошибку выше ??

1 Ответ

0 голосов
/ 07 ноября 2019

Удалить [] из $room_ids[] = $request->get('room_ids');. Этот синтаксис означает добавление значений в следующий индекс.

Таким образом, ваша $room_ids воля заполнила $room_ids[0] полученными данными, и count($room_ids) будет равно 1, но count($dates) может быть больше 1, поэтому $room_ids[$i]получит следующий $i и, таким образом, $room_ids[1] будет неопределенным.

Кроме того, вы используете $dates[$f], когда он должен быть $dates[$i], а также $room_ids[$i], возможно, должно быть $room_ids[$f].

Следующий шаг, $room_price[$i]; означает, что $room_price должен быть массивом, а $i является счетчиком массива $dates (из цикла prev для цикла), будьте осторожны с ним. Это означает, что длина $dates должна совпадать с длиной $room_price, которую вы получили из базы данных.

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