2009-02-19 3 views
19
nicht versuchen

ich einen Bär von einem Zeitpunkt habe die einfachste Datensatz aus einem Modell Speicher namens ItemView:Wie debuggen, wenn CakePHP Modell :: save() eine INSERT nicht

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

Wo $ this-> Daten:

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

Und mein Tisch ist:

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 ; 

bei der Abfrage-Dump im Debug-Modus sucht, ist Kuchen nicht einmal eine INSERT versucht, so Ich habe keine Ahnung, wie man debuggt.

Jede Hilfe wäre willkommen.

+0

Durch die Art und Weise sollten Sie InnoDB als Datenbank-Engine verwenden ebenfalls. – k4t434sis

+0

das wird hilfreich sein und Zeit sparen http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/ – RSK

Antwort

24

Wow, zwei miserable Stunden meines Lebens verschwendet.

Denken Sie daran, dass Ihre beforeSave()true zurückgeben muss!

+0

Großartig! Danke, dass du mir diese 2 Stunden gerettet hast! :) – Seb

+0

Ich verbrachte 8 Stunden damit, das zu duplizieren und dasselbe zu finden. Wünschte ich hätte SO früher gesucht! – ash

+0

ahhh, danke für die Rettung meines Lebens.Dieses Problem kostet mich 2 Stunden – Ish

6

Was mich immer erreicht ist, dass wenn ich die tatsächliche Tabelle (in der Regel durch Hinzufügen von Attributen) ändern, dann müssen Sie Ihren Cache leeren. In der Regel nur das Löschen alles in den folgenden zwei Ordnern macht den Trick für mich:

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

Das war super hilfreich !! nach 2 Stunden Herumspielen gewinne ich ... Cheers !! –

1

Was ist der Name des Controllers Sie verwenden?

Nicht übereinstimmende Namen von Controller und Modell führen ebenfalls zu Fehlern. Wenn Sie den Posts-Controller verwenden, sollte das Modell Post verwendet werden. Wenn Sie Post Modell in anderen Controller verwenden; sagen BlogsController dann sollte das Post Modell wie geladen werden folgende:

<?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

Es mag sein, Validierungen false zurück .. können Sie prüfen, wie

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

falsch Setzen und prüfen, ob nun Daten-Einsätze, wenn es dann ist es Validierungsfehler

+1

Was? Wie wäre es, nur Model-> validationErrors zu überprüfen, statt auf Fehler? – mark

1

so etwas wie dieses sein kann
$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

Zum debuggen von Model-> save() Überprüfen Sie die Validierungsfehler und die letzte SQL-Abfrage

0

Das gleiche Problem hier. Ich habe 2 Stunden meines Lebens verschwendet.

Lösung: ich das vergessen:

array('post', 'put') 
7

In cakephp 3.x können Sie während des Einsatzes debuggen/aktualisieren

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

} 
+0

Danke, du hast mich nach stundenlangem Versuch gerettet, das herauszufinden ... – doterobcn