Ответ 1
Ничего себе, два жалких часа моей жизни впустую.
Помните, что ваш beforeSave()
должен возвращать true
!
У меня есть медведь с сохранением самой простой записи из модели ItemView:
if($this->save($this->data)) {
echo 'worked';
} else {
echo 'failed';
}
Где $this- > data:
Array
(
[ItemView] => Array
(
[list_id] => 1
[user_id] => 1
)
)
И моя таблица:
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 ;
Посмотрев на дамп запроса в режиме отладки, Cake даже не пытается INSERT, поэтому я не знаю, как отлаживать.
Любая помощь будет оценена.
Ничего себе, два жалких часа моей жизни впустую.
Помните, что ваш beforeSave()
должен возвращать true
!
Чтобы отладить Model- > save(), проверьте ошибки проверки и последний запрос sql
$this->Model->save($data);
debug($this->Model->validationErrors); //show validationErrors
debug($this->Model->getDataSource()->getLog(false, false)); //show last sql query
Что всегда вызывает меня, так это то, что если я изменяю фактическую таблицу (обычно добавляя к ней атрибуты), вы должны очистить свой кеш. Обычно просто удаление всего из двух следующих папок делает трюк для меня:
tmp > cache > models
tmp > cache > persistent
В cakephp 3.x вы можете отлаживать во время вставки/обновления
if ($this->TableName->save($entity)) {
// success
} else {
// if not save, will show errors
debug($entity->errors());
}
Какое имя контроллера вы используете?
Несоответствие имени контроллера и модели также вызывает некоторые ошибки. Если вы используете контроллер сообщений, то следует использовать модель Post
. Если вы используете модель Post
внутри другого контроллера; скажем BlogsController
, тогда модель Post
должна быть загружена следующим образом:
<?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);
}
}
}
?>
Может быть, Validations возвращает false. Вы можете проверить, как
$this->Model->save($this->data, false);
Положите false и проверьте, не вставлены ли в настоящее время данные, если это то, что это ошибка проверки
может быть что-то вроде этого
$this->Model->set($this->data);
$errors = $this->Model->validate();// or perhaps validationError(), please confirm
if(!$errors) {
$this->Model->save();
}else{
//show errors
pr($errors);
}
Такая же проблема. Я потратил 2 часа своей жизни.
Решение: Я забываю об этом:
array('post', 'put')