2016-02-01 3 views
0

Я должен получить диапазон дат для начала & даты окончания, выбранные пользователем, проверьте, что дата не распространяется на выходные и/или праздничные дни и вставлять в базу данных за каждую действительную дату до даты окончания.Сохранение нескольких записей, созданных с нескольких дат в 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 на один день.

+1

Какую версию тортов вы используете? Я не могу дать вам отличный ответ без этого. – chrisShick

+0

я использую торт 2.5x –

ответ

0

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

$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 поля в базе данных.