error - saveall cakephp 3
Cómo depurar cuando CakePHP Model:: save() no intenta un INSERT (8)
Guau, dos horas miserables de mi vida perdidas.
Recuerde que su beforeSave()
debe volverse true
.
Me está costando un tiempo guardar el registro más simple de un modelo llamado ItemView:
if($this->save($this->data)) {
echo ''worked'';
} else {
echo ''failed'';
}
Donde $ this-> data es:
Array
(
[ItemView] => Array
(
[list_id] => 1
[user_id] => 1
)
)
Y mi mesa 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 ;
Mirando el volcado de consultas en modo de depuración, Cake ni siquiera está intentando un INSERT, así que no tengo idea de cómo depurar.
Cualquier ayuda sería apreciada.
¿Cuál es el nombre del controlador que estás usando?
Igualar el nombre del controlador y el modelo también causa algunos errores. Si está utilizando el controlador de Posts, entonces se debe usar el modelo de Post
. Si está utilizando el modelo de Post
dentro de otro controlador; di BlogsController
luego el modelo de Post
debería cargarse de la siguiente manera:
<?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);
}
}
}
?>
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);
}
Para depurar Model-> save () compruebe 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
El mismo problema aqui. Perdí 2 horas de mi vida.
Solución: me olvido de esto:
array(''post'', ''put'')
Puede ser, Validations devuelve falso .. Puede verificar como
$this->Model->save($this->data, false);
Ponga "falso" y compruebe si ahora los datos se insertan, si es así, es un error de validación
En cakephp 3.x, puede depurar durante la inserción / actualización
if ($this->TableName->save($entity)) {
// success
} else {
// if not save, will show errors
debug($entity->errors());
}
Lo que siempre me atrapa es que si modifico la tabla real (generalmente añadiéndole atributos), entonces debe vaciar su caché. Por lo general, borrar todo dentro de las dos carpetas siguientes me convence:
tmp > cache > models
tmp > cache > persistent