2009-02-19 20 views
19

Estoy teniendo un oso de un tiempo de guardar el registro más simple de un modelo llamado ItemView:Cómo depurar cuando CakePHP Modelo :: save() no intenta un INSERT

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

Donde $ this-> datos es:

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

Y mi tabla es:

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 ; 

Buscando en el vertedero consulta en modo de depuración, pastel ni siquiera se intenta un INSERT, por lo No tengo idea de cómo depurar.

Cualquier ayuda sería apreciada.

+0

Por cierto que usted debe utilizar InnoDB como motor de base de datos además. – k4t434sis

+0

esto será útil y ahorrará tiempo http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/ – RSK

Respuesta

24

Guau, dos horas miserables de mi vida perdidas.

Recuerde que su beforeSave() debe devolver true!

+0

¡Genial! ¡Gracias por salvarme esas 2 horas! :) – Seb

+0

Pasé 8 horas duplicando esto y encontrando lo mismo. ¡Ojalá hubiera buscado antes! – ash

+0

ahhh, gracias por salvarme la vida.este problema me cuesta 2 horas – Ish

6

Lo que siempre me atrae es que si modifico la tabla real (generalmente añadiéndole atributos), entonces debe vaciar su caché. Por lo general, acaba de borrar todo dentro de las dos carpetas siguientes no el truco para mí:

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

Esto fue super útil !! después de 2 horas de derping around gano ... ¡¡¡¡Saludos !! –

1

¿Cuál es el nombre del controlador que está utilizando?

Al no coincidir el nombre del controlador y el modelo también se producen algunos errores. Si está utilizando el controlador de Mensajes, se debe usar el modelo Post. Si está utilizando el modelo Post dentro de otro controlador; dicen BlogsController entonces el modelo Post deben cargarse como siguiente:

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

Puede ser, validaciones devuelve false .. Puede comprobar como

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

Ponga falsa y comprobar si ahora inserciones de datos, si es entonces es error de validación

+1

¿Qué? ¿Qué tal si solo verificamos Model-> validationErrors en lugar de fallar? – mark

1

puede ser algo como esto

$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

Para depurar Modelo-> save() comprobar los errores de validación y la última consulta SQL

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

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

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

mismo problema aquí. Perdí 2 horas de mi vida.

Solución: me olvido de esto:

array('post', 'put') 
7

En 3.x cakephp, puede depurar durante insertar/actualizar

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

} 
+0

Gracias, me salvaste después de horas de tratar de verificar esto ...... – doterobcn

Cuestiones relacionadas