2009-02-19 7 views
19

Sto avendo un orso di un risparmio di tempo del record più semplice da un modello chiamato ItemView:Come eseguire il debug quando CakePHP Modello :: save() non tenta un INSERT

if($this->save($this->data)) { 
    echo 'worked'; 
} else { 
    echo 'failed'; 
} 

Dove $ this-> dei dati è:

Array 
(
    [ItemView] => Array 
     (
      [list_id] => 1 
      [user_id] => 1 
     ) 
) 

E il mio tavolo è:

CREATE TABLE IF NOT EXISTS `item_views` (
    `id` int(11) NOT NULL auto_increment, 
    `list_id` int(11) NOT NULL, 
    `user_id` int(11) default NULL, 
    `user_ip` int(10) unsigned default NULL, 
    `created` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ; 

Guardando la discarica query in modalità debug, torta non è nemmeno tentando un INSERT, così Non ho idea di come eseguire il debug.

Qualsiasi aiuto sarebbe apprezzato.

+0

Tra l'altro si dovrebbe utilizzare InnoDB come motore di database anche. – k4t434sis

+0

questo sarà utile e risparmiare tempo http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/ – RSK

risposta

24

Wow, due ore miserabili della mia vita sprecate.

Ricorda che il tuo beforeSave() deve restituire true!

+0

Grande! Grazie per avermi salvato quelle 2 ore! :) – Seb

+0

Ho trascorso 8 ore a duplicare questo e trovare la stessa cosa. Vorrei aver cercato SO prima! – ash

+0

ahhh, grazie per avermi salvato la vita.questo problema mi costa 2 ore – Ish

6

Ciò che mi viene sempre in mente è che se modifico la tabella attuale (in genere aggiungendo attributi ad essa), è necessario svuotare la cache. Di solito basta eliminare tutto nelle due seguenti cartelle:

tmp > cache > models 
tmp > cache > persistent 
+2

Questo è stato super utile !! dopo 2 ore di derping in giro vinco ... Saluti !! –

1

Qual è il nome del controller che si sta utilizzando?

Il mancato abbinamento del nome del controller e del modello causa anche alcuni errori. Se si utilizza il controller di post, è necessario utilizzare il modello Post. Se si utilizza il modello Post all'interno di un altro controller; dicono BlogsController allora il modello Post dovrebbe essere caricato come segue:

<?php 
    class BlogsController extends AppController 
    { 
     public function index() 
     { 
      $this->loadModel("Post");  
      //Here I'm loading other model inside blogs controller 
      if($this->request->is('post')) 
      { 
       $this->Post->save($this->request->data); 
      } 
     } 
    } 
    ?> 
1

Può essere, convalide restituisce false .. È possibile controllare come

$this->Model->save($this->data, false); 

Mettere falsa e controllare se ora inserisce i dati, se è allora è errore di convalida

+1

Cosa? Che ne dici di controllare Model-> validationErrors invece che fallire? – mark

1

può essere qualcosa di simile

$this->Model->set($this->data); 

$errors = $this->Model->validate();// or perhaps validationError(), please confirm 

if(!$errors) { 
    $this->Model->save(); 
}else{ 
    //show errors 
    pr($errors); 

} 
16

Per eseguire il debug Model-> save() controllare gli errori di validazione e l'ultima domanda di sql

$this->Model->save($data); 

debug($this->Model->validationErrors); //show validationErrors 

debug($this->Model->getDataSource()->getLog(false, false)); //show last sql query 
0

Stesso problema qui. Ho perso 2 ore della mia vita.

Soluzione: mi dimentico di questo:

array('post', 'put') 
7

In cakephp 3.x, è possibile eseguire il debug durante l'inserimento/aggiornamento

if ($this->TableName->save($entity)) { 
     // success 
} else { 
// if not save, will show errors 
    debug($entity->errors()); 

} 
+0

Grazie, mi hai salvato dopo ore di tentativi di verificarlo ...... – doterobcn

Problemi correlati