在 CakePHP 2.x 中保存从一系列日期创建的多个记录


Save multiple records created from a range of dates in 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循环时逐行保存吗?非常感谢有关保存数据的任何帮助。

铌: event_date将类似于一天的event_stop_time

尝试以下操作:

$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字段,则上述方法应该有效。