Сохранение нескольких записей, созданных из диапазона дат в CakePHP 2.x

Мне нужно получить диапазон дат для дат начала и окончания, выбранных пользователем, проверить, что дата не приходится на выходные и/или праздничные дни, и вставить в базу данных для каждой допустимой даты до даты окончания.

Ниже мой код:

$aryRange=array();

$istartTime=mktime(1,0,0,substr($startTime,5,2),     substr($startTime,8,2),substr($startTime,0,4));
$iendTime=mktime(1,0,0,substr($endTime,5,2),     substr($endTime,8,2),substr($endTime,0,4));

if ($iendTime>=$istartTime)
{
    array_push($aryRange,date('Y-m-d',$istartTime)); // first entry
    while ($istartTime<$iendTime)
    {
        $istartTime+=86400; // add 24 hours
        array_push($aryRange,date('Y-m-d',$istartTime));
    }
}

$aryRange = array_values($aryRange);

$dates = array($aryRange);

$fdate = strtotime($startTime);
$day = date("N",$fdate);


$holidays = $this->Leave->PublicHoliday->find ('all', array('fields'=>array('PublicHoliday.SetDate')));


foreach($dates as $key => $value)
{
    if ($day == 7 || $day == 6)
    {
        unset ($dates[$k]);
        continue;

    }
    if (in_array($value, $holidays))
    {
        unset ($dates[$k]);
        continue;
    }

}

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

$this->request->data['Leave']['event_date'] = $value[0];
$this->request->data['Leave']['event_stop_time'] = $value[0];
$this->Leave->save($this->request->data);

Могу ли я сохранять строку за строкой по мере выполнения цикла foreach? Любая помощь в сохранении данных очень ценится.

NB: event_date будет похоже на event_stop_time на один день.


person P K    schedule 01.02.2016    source источник
comment
Какой вариант торта вы используете? Без этого я не могу дать вам отличный ответ.   -  person chrisShick    schedule 02.02.2016


Ответы (1)


Попробуйте следующее:

$period = new DatePeriod(new DateTime($istarTime), new DateInterval('P1D'), new DateTime($iendTime));
$holidays = $this->Leave->PublicHoliday->find('list', array('fields'=>array('PublicHoliday.SetDate')));

foreach ($period as $date) {
    if ($date->format('N') < 6 && !in_array($date->format('Y-m-d'), $holidays)) {
        $data[] = ['Leave' => [
            'event_date' => $date->format('Y-m-d'),
            'event_stop_time' => $date->format('Y-m-d'),
        ]];
    }
}

$this->Leave->saveMany($data);

Вышеприведенное должно работать, если PublicHoliday.SetDate является полем DATE в вашей базе данных.

person Inigo Flores    schedule 02.02.2016