A nova coluna adicionada à tabela não está sendo salva


8

Adicionei uma nova coluna à tabela newsletter_subscriber, 'artists_followed'. na minha Mage_Newsletter_Model_Subscriberclasse de modelo substituído , adicionei a seguinte função:

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());
        }
    }
}

tudo corre bem, nenhum erro é gerado, mas quando eu olho no banco de dados, a nova coluna não é preenchida.

Minha mesa é:

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';

Estou destruindo meu cérebro neste. Alguma ideia? Estou perdendo algo completamente óbvio?


Eu tenho o mesmo problema. Adicionado um atributo (coluna) no SalesRule, apesar do modelo ter esse campo definido corretamente, ele nunca atualiza o banco de dados.
Vicary

Se alguém usa n98-magerun, talvez isso poderia ajudar: ./n98-magerun cache:flush:)
Attila Naghi

Respostas:


41

Outro problema pode ser:

O Zend_Db armazenou em cache a estrutura das tabelas do banco de dados. Se você adicionar uma nova coluna, atualize o cache e o Zend sabe para preencher a tabela.

Mesmo se você tiver todo o cache desativado, a estrutura do banco de dados e outras informações ainda poderão ser armazenadas em cache.

Obrigado james.c.funk

Certifique-se de excluir tudo var/cache, isso acontece, quando você aperta o botão na parte superior, mas NÃO ao marcar todas as caixas de seleção e atualizá-las!


você quer dizer cache magento? ou existe outro cache que é somente zend?
Laura

Eu tenho o mesmo problema, mas limpar o cache não funciona para mim.
Vicary

3
Corrigido o problema que eu estava enfrentando, apenas eu precisava liberar o armazenamento em cache e o armazenamento Magento!
NathanielR

11
Thnx @FabianBlechschmidt isso estava me deixando louca
BlueC

11
Por favor, pare de me agradecer nos comentários, mas vote em vez disso. Precisamos do comentário seção para comentários reais :-)
Fabian Blechschmidt

2

ok, eu consegui trabalhar mudando $this->setArtistsFollowed($artist)para $this->setData('artists_followed', $artist). Não sei por que isso funcionou? o que aconteceu com o setter mágico neste caso?


O que "echo typeof ($ this);" Retorna?
22413 philwinkle

esse é um método específico para magento? Estou recebendo erro fatal: Chame a função indefinida typeof () quando usar isso.
Laura

11
Uau. Meu cérebro está frito em Javascript lol :) Desculpe, tente o seguinte:echo get_class($this);
philwinkle

está retornando minha classe substituída. é estranho, eu tenho outro campo que eu adicionei a esta tabela, e usando o setter mágico funciona lá, apenas não neste caso.
Laura

1

Você precisa liberar o armazenamento em cache.

Você pode fazer isso através do back-end:

Sistema -> Gerenciamento de cache -> Clique no botão 'Liberar armazenamento em cache'.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.