2013-05-14 1 views
0

я новичок в торт и wodering, как вставить несколько строк в одной функции SaveAll, я получил эту таблицу,вставки нескольких строк в SaveAll в CakePHP

CREATE TABLE IF NOT EXISTS `dates` (
`date` varchar(10) COLLATE utf8_unicode_ci NOT NULL 
) 

то, что я пытаюсь сделать выпущено пользователю выбрать дату начала и дату окончания с помощью JQuery Calander после того, как представить все даты между этим диапазоном будет сохранен в базу данных, я уже получил массив дат, например:

`array(
     (int) 0 => '5/8/2013', 
(int) 1 => '6/8/2013', 
(int) 2 => '7/8/2013', 
(int) 3 => '8/8/2013', 
) 

` тогда мой контроллер выглядит это:

public function index(){ 

if ($this->request->is('post')) { 
       $this->Date->create(); 

      $data = array(); 
      $data['dates']=array(); 

      $startDate = $this->request->data['Date']['from']; 
      $endDate = $this->request->data['Date']['to']; 

      $datesBlocked = $this->loopDates($this->request->data['Date']['from'],$this->request->data['Date']['to']); 

      $data['dates'][] = $this->request->data['Blockdate']['from']; 
      $data['dates'][] = $this->request->data['Blockdate']['to']; 

      /*foreach($datesBlocked as $data) {    
      $data['dates'][] = $data;    
      }*/ 

      if($this->Date->saveAll($data)) { 

       $this->Session->setFlash(__('done')); 

       if ($this->Session->read('UserAuth.User.user_group_id') == 1) { 
        // $this->redirect("/manages"); 
       } 
      } 
      } 
public function loopDates($from,$to){ 
     $blockdates = array();  
    $start = strtotime($from); 
    $end = strtotime($to); 
    debug($start); 
    $counter = 0;  
for($t=$start;$t<=$end;$t+=86400) { 
      $d = getdate($t); 
      $blockdates[$counter++] = $d['mday'].'/'.$d['mon'].'/'.$d['year']; 
} 
debug($blockdates); 
return $blockdates; 

}

вопрос был я не могу получить Еогеасп работу, если я раскомментировать Еогеасп, я получил ошибку сказал Нелегальная строка Смещение «даты», так что я заметил, что и попытаться добавить только начало дату и дату окончания массива, чтобы увидеть, работает ли это, тогда я получил еще одну ошибку.

`array(
'dates' => array(
    (int) 0 => '08/05/2013', 
    (int) 1 => '09/05/2013' 
) 

) ` Извещение (8): Array для преобразования строки [CORE \ Cake \ Model \ Datasource \ DboSource.php, строка 1005] Код

Потому что я пытаюсь вставить 2 значения в одно поле ... я знаю, он должен быть таким, как

`array(
    'dates' => array((int) 0 => '08/05/2013',   
) 
    'dates' => array((int) 1 => '09/05/2013' 
    )) 

`, но не может понять, как это сделать. Любая помощь будет очень признательна !!!!

ответ

0

Структура вы хотите, чтобы ваш массив, чтобы сохранить несколько дат, используя saveAll() это:

array(
    'Date' => array(
     0 => array(
      'date' => '08/05/2013', 
     ), 
     1 => array(
      'date' => '09/05/2013', 
     ) 
    ), 
) 
+0

hi dave, thx для ответа, я получил то, что вы имеете в виду, можете ли вы рассказать мне, как это сделать, пожалуйста, более конкретно, борется с этими вложенными массивами – Crystallol

+0

@Crystallol - это, вероятно, стоит другого вопроса, который относится только к PHP и массивы. – Dave

0

Я знаю, что это немного поздно, но написать несколько строк в цикле, вы должны продолжить сохранить с помощью create().

например:

foreach($items as $lineItem){ 

    $this->Invoice->create(); 

    $this->Invoice->save(array(
     'user_id'=>$property['User']['id'], 
     'invoice_id'=>$invId['Invoices']['id'], 
     'item_id'=>$lineItem['item_number'],  
     'quantity'=>$lineItem['quantity'], 
     'price'=>$lineItem['mc_gross'] 
    ); 

} 

Просто подумал, что стоит упомянуть, мы надеемся, это поможет кому-то.

+0

есть закрывающая скобка) отсутствует в вашем save (array()); – Meer