Новый столбец, добавленный в таблицу, не сохраняется


8

Я добавил новый столбец в таблицу newsletter_subscriber, «artist_followed». в мой переопределенный Mage_Newsletter_Model_Subscriberкласс модели я добавил следующую функцию:

public function updateSubscriberArtists($email, $artist) {
    $this->loadByEmail($email);
    if ($this->getId()) {
        $this->setArtistsFollowed($artist);

        try {
            $this->save();
        }
        catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }
}

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

Мой стол:

CREATE TABLE `mage_newsletter_subscriber` (
  `subscriber_id` int(7) unsigned NOT NULL AUTO_INCREMENT,
  `store_id` smallint(5) unsigned DEFAULT '0',
  `change_status_at` datetime DEFAULT NULL,
  `customer_id` int(11) unsigned NOT NULL DEFAULT '0',
  `subscriber_email` varchar(150) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `subscriber_status` int(3) NOT NULL DEFAULT '0',
  `subscriber_confirm_code` varchar(32) DEFAULT 'NULL',
  `created_at` datetime DEFAULT NULL,
  `campaign_source` varchar(255) DEFAULT NULL,
  `artists_followed` text,
  PRIMARY KEY (`subscriber_id`),
  KEY `FK_SUBSCRIBER_CUSTOMER` (`customer_id`),
  KEY `FK_NEWSLETTER_SUBSCRIBER_STORE` (`store_id`),
  CONSTRAINT `FK_NEWSLETTER_SUBSCRIBER_STORE` FOREIGN KEY (`store_id`) REFERENCES `mage_core_store` (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Newsletter subscribers';

Я ломаю голову над этим. Любые идеи? Я что-то упускаю совершенно очевидно?


У меня такая же проблема. В SalesRule добавлен атрибут (столбец), несмотря на то, что для модели правильно задано это поле, база данных никогда не обновляется.
Vicary

Если кто-то использует n98-magerun, может быть, это поможет: ./n98-magerun cache:flush:)
Аттила Наги,

Ответы:


41

Другая проблема может быть:

Zend_Db кэшировал структуру таблиц базы данных. Если вы добавите новый столбец, обновите кеш, и Zend знает, как заполнить таблицу.

Даже если у вас отключен весь кэш, структура базы данных и другая информация все равно могут быть кэшированы.

Спасибо james.c.funk

Убедитесь, что вы удалили все внутри var/cache, это происходит, когда вы нажимаете кнопку сверху, а НЕ когда вы устанавливаете все флажки и обновляете их!


ты имеешь ввиду кеш magento? или есть другой кеш, который предназначен только для Zend?
Лора

У меня такая же проблема, но очистка кеша у меня не работает.
Vicary

3
Исправлена ​​проблема, с которой я столкнулся, только мне нужно было очистить Cache Storage и Magento Storage!
NathanielR

1
Спасибо @FabianBlechschmidt, это сводило меня с ума
BlueC

1
Пожалуйста, прекратите благодарить меня в комментариях, но вместо этого проголосуйте. Нам нужен раздел комментариев для актуальных комментариев :-)
Фабиан Блехшмидт

2

хорошо, я получил его на работу, изменив $this->setArtistsFollowed($artist)на $this->setData('artists_followed', $artist). Я не уверен, почему это сработало? что случилось с волшебником в этом случае?


Что означает "echo typeof ($ this)"; возвращение?
Philwinkle

это magento-специфический метод? я получаю фатальную ошибку: вызову неопределенной функции typeof (), когда я использую это.
Лора

1
Ух ты. Мой мозг echo get_class($this);
зажарен

это возвращает мой переопределенный класс. Странно, у меня есть еще одно поле, которое я добавил в эту таблицу, и использование волшебного сеттера работает там, но не в этом случае.
Лора

1

Вам необходимо очистить кэш-память.

Вы можете сделать это через бэкэнд:

Система -> Управление кэшем -> Нажмите кнопку «Очистить кэш-память».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.