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を試行していないため、デバッグ方法がわかりません。
どんな助けでもいただければ幸いです。
うわー、私の人生の2つの悲惨な時間が無駄になりました。
beforeSave()
はtrue
を返さなければならないことに注意してください。
Model-> save()をデバッグするには、検証エラーと最後のSQLクエリを確認します
$this->Model->save($data);
debug($this->Model->validationErrors); //show validationErrors
debug($this->Model->getDataSource()->getLog(false, false)); //show last sql query
Cakephp 3.xでは、挿入/更新中にデバッグできます
if ($this->TableName->save($entity)) {
// success
} else {
// if not save, will show errors
debug($entity->errors());
}
いつも私が得ているのは、実際のテーブルを変更する場合(通常は属性を追加することによって)、キャッシュをフラッシュする必要があるということです。通常、次の2つのフォルダ内のすべてを削除するだけでうまくいきます。
tmp > cache > models
tmp > cache > persistent
使用しているコントローラーの名前は何ですか?
コントローラとモデルの名前が一致しない場合も、いくつかのエラーが発生します。 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);
}
}
}
?>
このようなものかもしれません
$this->Model->set($this->data);
$errors = $this->Model->validate();// or perhaps validationError(), please confirm
if(!$errors) {
$this->Model->save();
}else{
//show errors
pr($errors);
}
可能性があります、検証はfalseを返します。
$this->Model->save($this->data, false);
Falseを入力し、データが挿入されているかどうかを確認します。挿入されている場合は、検証エラーです。
ここでも同じ問題があります。私は私の人生の2時間を無駄にしました。
解決策:私はこれを忘れています:
array('post', 'put')