Подтвердить что ты не робот

Как отлаживать, когда 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, поэтому я не знаю, как отлаживать.

Любая помощь будет оценена.

4b9b3361

Ответ 1

Ничего себе, два жалких часа моей жизни впустую.

Помните, что ваш beforeSave() должен возвращать true!

Ответ 2

Чтобы отладить Model- > save(), проверьте ошибки проверки и последний запрос sql

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

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

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

Ответ 3

Что всегда вызывает меня, так это то, что если я изменяю фактическую таблицу (обычно добавляя к ней атрибуты), вы должны очистить свой кеш. Обычно просто удаление всего из двух следующих папок делает трюк для меня:

tmp > cache > models 
tmp > cache > persistent

Ответ 4

В cakephp 3.x вы можете отлаживать во время вставки/обновления

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

}

Ответ 5

Какое имя контроллера вы используете?

Несоответствие имени контроллера и модели также вызывает некоторые ошибки. Если вы используете контроллер сообщений, то следует использовать модель 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);
            }
        }
    }
    ?>

Ответ 6

Может быть, Validations возвращает false. Вы можете проверить, как

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

Положите false и проверьте, не вставлены ли в настоящее время данные, если это то, что это ошибка проверки

Ответ 7

может быть что-то вроде этого

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

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

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

}

Ответ 8

Такая же проблема. Я потратил 2 часа своей жизни.

Решение: Я забываю об этом:

array('post', 'put')