Модель Magento не сохранит значения

Я работаю над встроенным модулем, который сохраняет пользовательскую таблицу. Моя проблема заключается в том, что я добавил поля в эту таблицу, поскольку я работал над ней, новые поля не будут сохраняться с помощью функции → Сохранить().

Я полностью удалил модуль и смонтировал его, позволив ему создать свою собственную таблицу с нуля, если у нее было некоторое внутреннее поле, которое я не знал, но все тот же результат.

После добавления моих данных я делаю var dump на том, что отправляется следующим образом:

$model = Mage::getModel("smsmanager/sms")->addData($post_data)->save();
var_dump($model->getData()); exit;

В результате

array
  'form_key' => string 'RUGN3fruWobAf8CZ' (length=16)
  'message' => string 'adg asdg sad' (length=14)
  'country' => string 'SE' (length=2)
  'telephone' => string '+46707332290' (length=12)
  'type' => int 2
  'id' => string '5' (length=1)

И все выглядит просто отлично. Когда я проверяю вновь созданную строку с ID 5, я получаю следующее:

|-----------------------------------------------------------------------------------------------------------|
|id int(11)| type int(11) | telephone varchar(20) | country varchar(2) | message text | date timestamp      |
|-----------------------------------------------------------------------------------------------------------|
| 5        | 2            | +46707332290          | NULL               | adg asdg sad | 2013-03-19 21:44:51 |
|-----------------------------------------------------------------------------------------------------------|

Я также попытался вручную вставить другие поля в таблицу базы данных типа "junkfield" и добавить ее с помощью $post_data['junkfield'] = "hello";, а также получить значение null в качестве значения.

Для меня это похоже на Magento, который меня заворачивает. Ошибочная логика. Кто-нибудь получил другое мнение о том, что может быть неправильным? О, и прежде, чем я забуду, вот мой макет таблицы:

CREATE TABLE IF NOT EXISTS `sms_entry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL,
  `telephone` varchar(20) DEFAULT NULL,
  `country` varchar(2) DEFAULT NULL,
  `message` text,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Независимо от того, что я пробовал, он просто не сохранит код страны. Я также попытался сделать varchar более крупным, чем 2, переключая имя на country_code (если страна была зарезервирована или что-то еще). Кажется, ничего не помогает.

Ответ 1

Отключение параметров кэширования в системе Magento Admin НЕ отключает все кэширование. Magento все еще кэширует структуры таблиц, данные локали и т.д. В каталоге var/cache/ в корневой папке Magento (это НЕ /var/cache).

Чтобы отключить все кэширование, добавьте следующую запись <cache> в раздел <global> app/etc/local.xml:

<config>
    <global>
        ...
        <cache>
            <backend>Zend_Cache_Backend_BlackHole</backend>
        </cache>
        ...

Чтобы очистить кеш, содержащий структуры таблицы, зайдите в систему администратора и выберите "Система" > "Управление кэшем" > "Хранилище флеш-кэша" (а не флеш-пурпурный кэш!). Это приведет к удалению файлов в var/cache.

Вы также можете очистить кеш через командную строку:

$ sudo rm -fr /path/to/your/magento/installation/var/cache/*

Ответ 2

насколько я знаю - Magento кэширует структуру базы данных как-то. так что только Flush Magento Cache должен помочь

Ответ 3

+1 обратите внимание также, что в моем случае я просто забыл, что использовал кеш REDIS, поэтому, если вы используете это, не забудьте также удалить этот кеш!!