Предложить временной интервал в соответствии с текущим временем - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть два запроса, полученные из двух представлений. Два представления имеют одинаковые столбцы в одном и том же порядке. Я сделал объединение двух, чтобы вернуть результаты на временном интервале. Я бы хотел, чтобы это было утром.

- предложить два пляжа утром и днем ​​

- иначе мы предлагаем днем ​​и завтра утром.

Вот моя функция

 public static function chercherTourneeOuPlageHoraire($eTypeTournee, $id_prestataire)
    {
        //query 
        $query = DB::table('v_tournee_infos');
        $query_m = DB::table('v_mission_infos');

        //$now = Carbon::now();
        $now = Carbon::parse("2020-04-29 06:00:00");
        if ($now->isWeekend()) {
            $h_i_s = $now->format('H:i:s');
            $now = Carbon::parse($now->endOfWeek()->addDay()->format('Y-m-d ' . $h_i_s));
        }

        $dates = [];
        //we are in the morning 
        if ($now < $now->clone()->format('Y-m-d 13:00:00')) {
            $first_plage = [$now->clone()->format('Y-m-d 13:00:00'), $now->clone()->format('Y-m-d 21:00:00')]; //-> Y-m-d 13:00 à 19:00
            $second_plage = [$now->clone()->addDays(1)->format('Y-m-d 08:00:00'), $now->clone()->addDays(1)->format('Y-m-d 13:00:00')];

            $query_builder = $query->Where(function ($q) use ($first_plage, $eTypeTournee, $id_prestataire) {
                $q->whereBetween('v_tournee_infos.start_date', $first_plage)
                    ->where('v_tournee_infos.type', $eTypeTournee);
            })
                ->orWhere(function ($q) use ($second_plage, $eTypeTournee, $id_prestataire) {
                    $q->orWhereBetween('v_tournee_infos.start_date', $second_plage)
                        ->where('v_tournee_infos.type', $eTypeTournee);
                })
                ->union($query_m->Where(function ($q) use ($first_plage, $eTypeTournee, $id_prestataire) {

                    $q->whereBetween('v_mission_infos.start_date', $first_plage)
                        ->where('v_mission_infos.type', $eTypeTournee);
                })
                    ->orWhere(function ($q) use ($second_plage, $eTypeTournee, $id_prestataire) {
                        $q->orWhereBetween('v_mission_infos.start_date', $second_plage)
                            ->where('v_mission_infos.type', $eTypeTournee);
                    }));

            $dates[] = $now->clone()->format('Y-m-d 14:00:00');
            $dates[] = $now->clone()->addDays(1)->format('Y-m-d 08:00:00');
        } else {
            $toMorrow = $now->clone()->addDay()->toDateString();

            $query_builder = $query->whereDate('v_tournee_infos.start_date', $toMorrow)
                ->where('v_tournee_infos.type', $eTypeTournee)
                ->union($query_m->whereDate('v_mission_infos.start_date', $toMorrow)
                    ->where('v_mission_infos.type', $eTypeTournee));

            $a = $now->clone()->addDay();
            $dates[] = $a->format('Y-m-d 08:00:00');
            $dates[] = $a->format('Y-m-d 14:00:00');
        }

        $results = $query_builder->orderBy('start_date')->get()->groupBy('start_date')->toArray();
        foreach ($dates as $d) {
            if (!isset($results[$d])) {
                $results[$d] = [];
            }
        }
        ksort($results);

        return $results;

    }

Союз готов, но проблема в том, что мне предложили плохие времена.

Я действительно не знаю, откуда взялись опасения.

Если кто-то может помочь мне решить эту проблему, заранее спасибо

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