перерыв между датами от даты и даты до - PullRequest
0 голосов
/ 07 октября 2018

Я работаю в Laravel.

  • В настоящее время я работаю в модуле посещаемости.
  • Моя проблема заключается в том, чтобы оставить заявку, сначала я обращаюсь с просьбой оставить from_date вto_date.
  • Далее, я собираюсь применить те же даты, чтобы применить ошибку I.
  • , а средняя дата применяется через ошибку.Это два условия ОК.
  • , но я подаю заявление, чтобы оставить ниже from_date и после to_dateЭто условие не выполняется

, как рассчитать это условие.мой код ниже, пожалуйста, проверьте

$keyWithData = DB::table('leave_allocations')
     ->select('employee','leave_type','name')
     ->where('leave_allocations.from_date','<=',$dateS->format('Y-m-d')." 00:00:00")
     ->where('leave_allocations.to_date','>=',$dateS->format('Y-m-d')." 00:00:00")
     ->where('leave_allocations.from_date','<=',$dateE)
     ->where('leave_allocations.to_date','>=',$dateE)
     ->where('leave_allocations.employee',$empdata->name)
     ->where('leave_allocations.leave_type',$type)
     ->first();

Спасибо

1 Ответ

0 голосов
/ 07 октября 2018

Я думаю, все, что вам нужно, это whereBetween() и orWhereBetween()

$keyWithData = DB::table('leave_allocations')
    ->select('employee','leave_type','name')
    ->where(function($query) use($dateS, $dateE) {
        $query->whereBetween('from_date', [
            $dateS->format('m-d-Y 00:00:00'), 
            $dateE->format('m-d-Y 00:00:00')
        ])
        ->orWhereBetween('to_date', [
            $dateS->format('m-d-Y 00:00:00'),
            $dateE->format('m-d-Y 00:00:00')
        ]);
    })
    ->where([
        ['leave_allocations.employee',$empdata->name].
        ['leave_allocations.leave_type',$type]
    ])
    ->first();

Другой подход с использованием диапазона дат

// create a period object between new leaves start date and end date.
$period = new \DatePeriod(
    $dateS,
    new \DateInterval('P1D'),
    $dateE
);

// all the days between new leave start date and end date.
$new_leave_dates = [];

foreach ($period as $key => $value) {
   array_push($dates, $value->format('Y-m-d'));
}

// get all the rows without those days.
$keyWithData = DB::table('leave_allocations')
    ->select('employee','leave_type','name')
    ->whereNotIn('from_date', $new_leave_dates)
    ->where([
        ['leave_allocations.employee',$empdata->name].
        ['leave_allocations.leave_type',$type]
    ])
    ->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...