insertar varias filas en un saveall en cakephp

yo soy novato en Pastel y wodering cómo insertar varias filas en una sola saveall función, tengo esta tabla,

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

lo que estoy tratando de hacer es permitir al usuario seleccionar la fecha de inicio y fecha de finalización usando JQuery calendario, una vez que presentar todas las fechas entre este rango se guardan en la base de datos, ya tengo la matriz de fechas, por ejemplo:

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

` entonces mi controlador se parece a esto:

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; 

}

problema fue que no se puede entrar foreach trabajo, si yo elimine el foreach, tengo error dijo Ilegal string offset 'fechas' , así que me comentó que y tratar de que sólo añade la fecha de inicio y fecha de finalización de la matriz para ver si funciona, luego tuve otro error, dijo.

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

) ` Aviso (8): Matriz de conversión de cadena [CORE\Cake\Model\Datasource\DboSource.php línea 1005]Código

porque yo estoy tratando de insertar 2 valores en un campo...sé que debe ser algo como

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

`pero no puedo averiguar cómo hacerlo. Cualquier ayuda sería mucho aprecio!!!!

2 Respuestas

  • Dave
    14 de mayo de 2013

    La estructura que usted querrá que su matriz para guardar varias fechas usando saveAll() es este:

    array(
        'Date' => array(
            0 => array(
                'date' => '08/05/2013',
            ),
            1 => array(
                'date' => '09/05/2013',
            )
        ),
    )
    
  • Deano
    20 de junio de 2014

    Sé que es un poco tarde, pero para escribir varias filas en un bucle, se debe proceder a la guarde con un create().

    por ejemplo:

    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']
        );
    
    }
    

    Sólo pensé que era digno de mencionar, espero que ayude a alguien.