La nouvelle colonne ajoutée au tableau ne sauvegarde pas


8

J'ai ajouté une nouvelle colonne à la table newsletter_subscriber, 'artists_followed'. dans ma Mage_Newsletter_Model_Subscriberclasse de modèle surchargée , j'ai ajouté la fonction suivante:

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

tout fonctionne bien, aucune erreur n'est levée, mais quand je regarde dans la base de données, la nouvelle colonne n'est pas remplie.

Ma table est:

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

Je creuse mon cerveau sur celui-ci. Des idées? Suis-je en train de manquer quelque chose de complètement évident?


J'ai le même problème. Ajout d'un attribut (colonne) dans SalesRule, bien que le modèle ait ce champ correctement défini, il ne met jamais à jour la base de données.
Vicary

Si quelqu'un utilise n98-magerun, cela pourrait peut-être aider: ./n98-magerun cache:flush:)
Attila Naghi

Réponses:


41

Un autre problème peut être:

Zend_Db a mis en cache la structure des tables de base de données. Si vous ajoutez une nouvelle colonne, actualisez le cache et Zend sait remplir le tableau.

Même si tout le cache est désactivé, la structure de la base de données et d'autres informations peuvent toujours être mises en cache.

Merci james.c.funk

Assurez-vous de tout supprimer var/cache, cela se produit, lorsque vous appuyez sur le bouton en haut, mais PAS lorsque vous cochez toutes les cases et les rafraîchissez!


voulez-vous dire le cache magento? ou existe-t-il un autre cache uniquement zend?
Laura

J'ai le même problème, mais vider le cache ne fonctionne pas pour moi.
Vicary

3
Correction du problème auquel j'étais confronté, seulement j'avais besoin de vider le stockage en cache et le stockage Magento!
NathanielR

1
Thnx @FabianBlechschmidt cela me rendait fou
BlueC

1
S'il vous plaît, arrêtez de me remercier dans les commentaires mais au lieu de voter. Nous avons besoin de la section des commentaires pour les commentaires réels :-)
Fabian Blechschmidt

2

ok, je l'ai fait fonctionner en changeant $this->setArtistsFollowed($artist)pour $this->setData('artists_followed', $artist). Je ne sais pas pourquoi cela a fonctionné? qu'est-il arrivé au setter magique dans ce cas?


Que signifie "echo typeof ($ this);" revenir?
philwinkle

est-ce une méthode spécifique à magento? je reçois une erreur fatale: appel à la fonction non définie typeof () lorsque j'utilise cela.
Laura

1
Sensationnel. Mon cerveau est frit sur Javascript lol :) Désolé, essayez ceci:echo get_class($this);
philwinkle

il renvoie ma classe surchargée. c'est étrange, j'ai un autre champ que j'ai ajouté à ce tableau, et l'utilisation du setter magique fonctionne là-bas, mais pas dans ce cas.
Laura

1

Vous devez vider le stockage du cache.

Vous pouvez le faire via le backend:

Système -> Gestion du cache -> Cliquez sur le bouton «Vider le stockage du cache».

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.