我正忙着从名为ItemView的模型中保存最简单的记录:
if($this->save($this->data)) {
echo 'worked';
} else {
echo 'failed';
}
$ this->数据为:
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,所以我不知道如何调试。
任何帮助都将不胜感激。
答案 0 :(得分:24)
请注意,beforeSave()
必须返回true
!
答案 1 :(得分:21)
调试Model-> save()检查验证错误和最后一个sql查询
$this->Model->save($data);
debug($this->Model->validationErrors); //show validationErrors
debug($this->Model->getDataSource()->getLog(false, false)); //show last sql query
答案 2 :(得分:8)
在cakephp 3.x中,您可以在插入/更新期间进行调试
if ($this->TableName->save($entity)) {
// success
} else {
// if not save, will show errors
debug($entity->errors());
}
答案 3 :(得分:6)
总是让我觉得如果我修改了实际的表(通常是通过添加属性),那么你必须刷新你的缓存。通常只删除以下两个文件夹中的所有内容对我来说很有用:
tmp > cache > models
tmp > cache > persistent
答案 4 :(得分:1)
您使用的控制器名称是什么?
控制器和型号的名称不匹配也会导致一些错误。如果您使用的是Posts控制器,则应使用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);
}
}
}
?>
答案 5 :(得分:1)
可能是,Validations返回false ..您可以检查
$this->Model->save($this->data, false);
输入false并检查现在是否插入数据,如果是,那么它是验证错误
答案 6 :(得分:1)
可能是这样的
$this->Model->set($this->data);
$errors = $this->Model->validate();// or perhaps validationError(), please confirm
if(!$errors) {
$this->Model->save();
}else{
//show errors
pr($errors);
}
答案 7 :(得分:0)
这里的问题相同。我浪费了2个小时的生命。
解决方案: 我忘了这个:
array('post', 'put')