如何在CakePHP Model :: save()不尝试INSERT时进行调试

时间:2009-02-19 18:16:51

标签: cakephp

我正忙着从名为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,所以我不知道如何调试。

任何帮助都将不胜感激。

8 个答案:

答案 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')
相关问题