Neue Spalte zur Tabelle hinzugefügt wird nicht gespeichert

8

Ich habe der Tabelle "newsletter_subscriber" eine neue Spalte hinzugefügt: "artist_followed". In meiner überschriebenen Mage_Newsletter_Model_SubscriberModellklasse habe ich die folgende Funktion hinzugefügt:

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

Alles läuft in Ordnung, es werden keine Fehler ausgegeben, aber wenn ich in die Datenbank schaue, wird die neue Spalte nicht ausgefüllt.

Mein Tisch ist:

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

Ich zerbreche mir den Kopf. Irgendwelche Ideen? Vermisse ich etwas völlig Offensichtliches?

Laura
quelle
Ich habe das gleiche Problem. In SalesRule wurde ein Attribut (eine Spalte) hinzugefügt. Obwohl das Modell dieses Feld korrekt festgelegt hat, wird die Datenbank nie aktualisiert.
Vicary
Wenn jemand n98-magerun benutzt, könnte dies vielleicht helfen: ./n98-magerun cache:flush:)
Attila Naghi

Antworten:

41

Ein weiteres Problem kann sein:

Zend_Db hat die Struktur der Datenbanktabellen zwischengespeichert. Wenn Sie eine neue Spalte hinzufügen, aktualisieren Sie den Cache und Zend kann die Tabelle füllen.

Selbst wenn Sie den gesamten Cache deaktiviert haben, werden die Datenbankstruktur und andere Informationen möglicherweise noch zwischengespeichert.

Danke james.c.funk

Stellen Sie sicher, dass Sie alles löschen var/cache, dies geschieht, wenn Sie auf die Schaltfläche oben klicken, aber NICHT, wenn Sie alle Kontrollkästchen aktivieren und aktualisieren!

Fabian Blechschmidt
quelle
Meinst du den Magento-Cache? oder gibt es einen anderen Cache, der nur zend ist?
Laura
Ich habe das gleiche Problem, aber das Löschen des Caches funktioniert bei mir nicht.
Vicary
3
Das Problem, mit dem ich konfrontiert war, wurde behoben. Nur ich musste sowohl den Cache-Speicher als auch den Magento-Speicher leeren!
NathanielR
1
Danke @FabianBlechschmidt das hat mich verrückt gemacht
BlueC
1
Bitte hör auf, mir in Kommentaren zu danken, sondern stimme zu. Wir brauchen den Kommentarbereich für aktuelle Kommentare :-)
Fabian Blechschmidt
2

ok, ich habe es zum Laufen gebracht, indem ich zu gewechselt $this->setArtistsFollowed($artist)habe $this->setData('artists_followed', $artist). Ich bin mir nicht sicher, warum das funktioniert hat? Was ist in diesem Fall mit dem Magic Setter passiert?

Laura
quelle
Was bedeutet "echo typeof ($ this)"? Rückkehr?
Philwinkle
ist das eine magentospezifische Methode? Ich erhalte einen schwerwiegenden Fehler: Aufruf der undefinierten Funktion typeof (), wenn ich das benutze.
Laura
1
Beeindruckend. Mein Gehirn ist auf Javascript gebraten lol :) Entschuldigung, versuchen Sie dies:echo get_class($this);
Philwinkle
Es gibt meine überschriebene Klasse zurück. Es ist seltsam, ich habe ein anderes Feld, das ich dieser Tabelle hinzugefügt habe, und die Verwendung des Magic Setters funktioniert dort, nur nicht in diesem Fall.
Laura
1

Sie müssen den Cache-Speicher leeren.

Sie können dies über das Backend tun:

System -> Cache-Verwaltung -> Klicken Sie auf die Schaltfläche 'Cache-Speicher leeren'.

CesarScout
quelle