La nuova colonna aggiunta alla tabella non sta salvando


8

Ho aggiunto una nuova colonna alla tabella newsletter_subscriber, "artisti_seguiti". nella mia Mage_Newsletter_Model_Subscriberclasse di modello sovrascritta , ho aggiunto la seguente funzione:

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

tutto funziona bene, non vengono generati errori, ma quando guardo nel database, la nuova colonna non viene popolata.

Il mio tavolo è:

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

Mi sto scervellando su questo. Qualche idea? Mi sto perdendo qualcosa di completamente ovvio?


Ho lo stesso problema. Aggiunto un attributo (colonna) in SalesRule, nonostante il modello abbia quel campo impostato correttamente, non aggiorna mai il database.
Vicary

Se qualcuno usa n98-magerun, forse questo potrebbe aiutare: ./n98-magerun cache:flush:)
Attila Naghi,

Risposte:


41

Un altro problema può essere:

Zend_Db ha memorizzato nella cache la struttura delle tabelle del database. Se aggiungi una nuova colonna, aggiorna la cache e Zend sa di riempire la tabella.

Anche se hai disabilitato tutta la cache, la struttura del database e altre informazioni potrebbero essere ancora memorizzate nella cache.

Grazie james.c.funk

Assicurati di eliminare tutto in var/cache, questo accade, quando premi il pulsante in alto ma NON quando selezioni tutte le caselle di controllo e le aggiorni!


intendi la cache magento? o c'è un'altra cache che è solo zend?
Laura,

Ho lo stesso problema, ma svuotare la cache non funziona per me.
Vicary

3
Risolto il problema che stavo affrontando, avevo solo bisogno di svuotare sia Cache Storage che Magento Storage!
NathanielR,

1
Thnx @FabianBlechschmidt mi stava facendo impazzire
BlueC il

1
Per favore, smettila di ringraziarmi nei commenti, ma invece vota. Abbiamo bisogno della sezione commenti per commenti reali :-)
Fabian Blechschmidt,

2

ok, l'ho fatto funzionare cambiando $this->setArtistsFollowed($artist)in $this->setData('artists_followed', $artist). non sono sicuro del motivo per cui ha funzionato? cosa è successo al setter magico in questo caso?


Cosa significa "echo typeof ($ this);" ritorno?
Filwinkle,

è un metodo specifico per magento? Ricevo un errore irreversibile: chiama la funzione indefinita typeof () quando lo uso.
Laura,

1
Wow. Il mio cervello è fritto su Javascript lol :) Mi dispiace, prova questo:echo get_class($this);
Philwinkle,

sta tornando la mia classe scavalcata. è strano, ho un altro campo che ho aggiunto a questa tabella, e usando il setter magico funziona lì, ma non in questo caso.
Laura,

1

È necessario scaricare l' archivio cache.

Puoi farlo attraverso il backend:

Sistema -> Gestione cache -> Fare clic sul pulsante "Svuota cache".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.