2009-02-19 51 views
19

我有一個時間熊節省從模型稱爲ItemView控件最簡單的記錄一個INSERT:如何調試時,CakePHP的型號::保存()不會嘗試

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

其中$這個 - >數據是:

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 ; 

望着在調試模式下查詢轉儲,蛋糕甚至沒有嘗試的INSERT,所以我不知道如何調試。

任何幫助,將不勝感激。

+0

通過你應該使用InnoDB的爲你的數據庫引擎的方式也。 – k4t434sis 2011-03-17 20:23:18

+0

這將是有益的,節省時間http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/ – RSK 2010-06-17 09:39:04

回答

24

哇,我生命中兩個悲慘的時間浪費了。

請記住,您的beforeSave()必須返回true

+0

太棒了!感謝您爲我節省2小時! :) – Seb 2009-07-08 23:31:41

+0

我花了8個小時複製這個並找到相同的東西。希望我早點搜索過! – ash 2010-01-20 03:07:05

+0

啊,謝謝你拯救我的生命。這個問題花費我2小時 – Ish 2010-04-05 06:13:07

6

總是得到我的是,如果我修改實際的表(通常是通過添加屬性),那麼你必須刷新緩存。通常只需刪除以下兩個文件夾中的所有內容,對我來說確實有效:

tmp > cache > models 
tmp > cache > persistent 
1

您正在使用的控制器的名稱是什麼?

不匹配控制器和模型的名稱也會導致一些錯誤。如果您使用的是帖子控制器,那麼應​​該使用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); 
      } 
     } 
    } 
    ?> 
1

可能,驗證返回false ..你可以,如果它檢查像

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

把假的,檢查是否現在數據插入,然後它驗證錯誤

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); 

} 
16

要調試型號 - >保存()檢查驗證錯誤和最後一個SQL查詢

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

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

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

同樣的問題在這裏。我浪費了2個小時的生命。

解決方案: 我忘了這一點:

array('post', 'put') 
7

在CakePHP 3.x中,你可以插入過程中調試/更新

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

}