Как отлаживать, когда CakePHP Model :: save () не пытается вставить - PullRequest
20 голосов
/ 19 февраля 2009

Я потратил немного времени на сохранение простейшей записи из модели 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 даже не пытается вставить, поэтому я понятия не имею, как отлаживать.

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

Ответы [ 8 ]

24 голосов
/ 19 февраля 2009

Ух ты, два несчастных часа моей жизни потрачены впустую.

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

21 голосов
/ 10 декабря 2013

Для отладки Model-> save () проверьте ошибки проверки и последний SQL-запрос

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

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

debug($this->Model->getDataSource()->getLog(false, false)); //show last sql query
8 голосов
/ 07 марта 2016

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

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

}
6 голосов
/ 18 апреля 2012

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

tmp > cache > models 
tmp > cache > persistent
1 голос
/ 27 сентября 2013

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

$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 голос
/ 24 июня 2013

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

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

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

1 голос
/ 30 мая 2013

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

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

Та же проблема здесь. Я потратил впустую 2 часа своей жизни.

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

array('post', 'put')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...