einfügen von mehreren Zeilen in einer saveall in cakephp

ich bin Neuling in Kuchen und wodering, wie legen Sie mehrere Zeilen in einer einzelnen saveall-Funktion, ich habe diese Tabelle,

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

was ich versuche zu tun ist, damit Benutzer wählen Sie start-und Enddatum mithilfe von JQuery-Kalander, einmal senden Sie die Daten zwischen dieser Bereich wird gespeichert in der Datenbank, ich hab schon den array mit Daten wie zB:

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

` dann ist mein controller sieht wie folgt aus:

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; 

}

Problem war das ich nicht foreach arbeiten, wenn ich die Auskommentierung der foreach, ich habe Fehler sagte Illegal string offset 'Termine' , so kommentierte ich, und versuchen, fügen Sie nur den start-und ein Enddatum, um das array zu sehen, ob das funktioniert, ich bekam dann ein weiterer Fehler, sagte.

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

) ` Notice (8): Arrays zu-string-Konvertierung [CORE\Cake\Model\Datasource\DboSource.php, line 1005]Code

cuz ich versuche, legen Sie die 2 Werte in einem Feld...ich weiß, es sollte sein, wie sth

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

`aber kann nicht herausfinden, wie es zu tun. Jede Hilfe wäre sehr zu schätzen!!!!

2 Antworten

  • Dave
    14. Mai 2013

    Die Struktur Sie wollen Ihre Arrays zum speichern mehrerer Daten mit saveAll() ist das:

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

    Ich weiß, dass dies ein wenig spät, aber zu schreiben mehrerer Zeilen in einer Schleife, Sie müssen gehen speichern Sie mit einem create().

    zB:

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

    Fand es einfach erwähnenswert, hoffentlich hilft es jemand.