2009-02-19 10 views
19

Mam Bear czasie zapisywania rekordu z najprostszego modelu o nazwie ItemView:Jak debugować gdy CakePHP model :: save() nie próbować wkładkę

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

Gdzie $ this-> danych:

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

A mój stół jest:

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 ; 

Patrząc na wysypisko zapytań w trybie debugowania, ciasto nie jest nawet próbą INSERT, tak Nie mam pojęcia, jak debugować.

Każda pomoc zostanie doceniona.

+0

Przy okazji należy używać InnoDB jako silnika bazy danych również. – k4t434sis

+0

to będzie pomocne i zaoszczędź czas http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/ – RSK

Odpowiedz

24

Wow, zmarnowane dwie nieszczęśliwe godziny mojego życia.

Pamiętaj, że Twój beforeSave() musi zwrócić true!

+0

Świetnie! Dzięki za uratowanie mnie przez te 2 godziny! :) – Seb

+0

Spędziłem 8 godzin na powtórzeniu tego i znalezieniu tego samego. Żałuję, że nie przeszukano tak wcześniej! – ash

+0

ahhh, dzięki za uratowanie mojego życia.ten problem kosztuje mnie 2 godziny – Ish

6

Co zawsze mnie powoduje, że jeśli zmienię rzeczywistą tabelę (zwykle poprzez dodanie do niej atrybutów), należy opróżnić pamięć podręczną. Zwykle po prostu usuwanie wszystkiego w dwóch następujących folderach robi dla mnie podstęp:

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

To było super pomocne !! po 2 godzinach wywalczania wygrywam ... Wiwaty !! –

1

Jak nazywa się kontroler, którego używasz?

Niedopasowanie nazwy kontrolera i modelu powoduje również błędy. Jeśli korzystasz z kontrolera pocztowego, należy użyć modelu Post. Jeśli używasz modelu Post wewnątrz innego kontrolera; powiedzmy BlogsController następnie model Post powinny być ładowane jak następuje:

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

Może to być Walidacje zwraca fałsz .. Można sprawdzić jak

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

Put fałszywe i sprawdzić, czy teraz wkładek danych, jeśli to to to jest błąd sprawdzania poprawności

+1

Co? A może po prostu sprawdzanie Model-> validationErrors zamiast na niepowodzenie? – mark

1

może być coś takiego

$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

Aby debugować Model-> save() sprawdzić błędy walidacji i ostatniego zapytania sql

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

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

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

sam problem tutaj. Zmarnowałem 2 godziny mojego życia.

Rozwiązanie: zapomnę tego:

array('post', 'put') 
7

W CakePHP 3.x, można debugować podczas wkładania/aktualizować

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

} 
+0

Dzięki, uratowałeś mnie po wielu próbach sprawdzenia tego ...... – doterobcn

Powiązane problemy