22

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 を試みていないので、デバッグ方法がわかりません。

どんな助けでも大歓迎です。

4

8 に答える 8

25

うわー、私の人生の惨めな 2 時間が無駄になりました。

あなたbeforeSave()が返さなければならないことを忘れないでくださいtrue

于 2009-02-19T18:32:02.220 に答える
9

Cakephp 3.x では、挿入/更新中にデバッグできます

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

}
于 2016-03-07T12:13:15.657 に答える
8

いつも気になるのは、実際のテーブルを変更した場合 (通常はテーブルに属性を追加することによって)、キャッシュをフラッシュする必要があるということです。通常、次の 2 つのフォルダー内のすべてを削除するだけでうまくいきます。

tmp > cache > models 
tmp > cache > persistent
于 2012-04-17T20:31:16.597 に答える
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);
            }
        }
    }
    ?>
于 2013-05-30T18:35:47.940 に答える
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);

}
于 2013-09-27T07:58:41.817 に答える