web-dev-qa-db-ja.com

CakePHP Model :: save()がINSERTを試行しない場合のデバッグ方法

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

どんな助けでもいただければ幸いです。

20

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

beforeSave()trueを返さなければならないことに注意してください。

24

Model-> save()をデバッグするには、検証エラーと最後のSQLクエリを確認します

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

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

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

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

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

}
8
Saidul Haque

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

tmp > cache > models 
tmp > cache > persistent
6

使用しているコントローラーの名前は何ですか?

コントローラとモデルの名前が一致しない場合も、いくつかのエラーが発生します。 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);
            }
        }
    }
    ?>
1
Vineet Kumar

このようなものかもしれません

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

$errors = $this->Model->validate();// or perhaps validationError(), please confirm

if(!$errors) {
   $this->Model->save();
}else{
   //show errors
   pr($errors);

}
1
sumit

可能性があります、検証はfalseを返します。

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

Falseを入力し、データが挿入されているかどうかを確認します。挿入されている場合は、検証エラーです。

1
Hitesh Chopra

ここでも同じ問題があります。私は私の人生の2時間を無駄にしました。

解決策:私はこれを忘れています:

array('post', 'put')
0
user1999