La nueva columna agregada a la tabla no se guarda

8

He agregado una nueva columna a la tabla newsletter_subscriber, 'artists_followed'. En mi Mage_Newsletter_Model_Subscriberclase de modelo anulada , he agregado la siguiente función:

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

todo funciona bien, no se arrojan errores, pero cuando miro en la base de datos, la nueva columna no se llena.

Mi mesa es:

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

Me estoy estrujando el cerebro en este caso. ¿Algunas ideas? ¿Me estoy perdiendo algo completamente obvio?

Laura
fuente
Tengo el mismo problema. Se agregó un atributo (columna) en SalesRule, a pesar de que el modelo tiene ese campo configurado correctamente, nunca actualiza la base de datos.
Vicario del
Si alguien usa n98-magerun, tal vez esto podría ayudar: ./n98-magerun cache:flush:)
Attila Naghi

Respuestas:

41

Otro problema puede ser:

Zend_Db almacenó en caché la estructura de las tablas de la base de datos. Si agrega una nueva columna, actualice el caché y Zend sabe que debe llenar la tabla.

Incluso si tiene todo el caché deshabilitado, la estructura de la base de datos y otra información aún pueden almacenarse en caché.

Gracias james.c.funk

¡Asegúrate de eliminar todo var/cache, esto sucede cuando presionas el botón en la parte superior pero NO cuando marcas todas las casillas de verificación y las actualizas!

Fabian Blechschmidt
fuente
¿te refieres al caché de magento? o hay otro caché que es solo zend?
Laura
Tengo el mismo problema, pero borrar el caché no me funciona.
Vicary del
3
Se corrigió el problema que estaba enfrentando, ¡solo necesitaba borrar el almacenamiento en caché y el almacenamiento de Magento!
NathanielR
1
Thnx @FabianBlechschmidt esto me estaba volviendo loco
BlueC
1
Por favor, deja de agradecerme en los comentarios, pero en lugar de votar. Necesitamos la sección de comentarios para comentarios reales :-)
Fabian Blechschmidt
2

ok, lo puse a trabajar cambiando $this->setArtistsFollowed($artist)a $this->setData('artists_followed', $artist). Aunque no estoy seguro de por qué funcionó. ¿Qué pasó con el setter mágico en este caso?

Laura
fuente
¿Qué significa "echo typeof ($ this);" ¿regreso?
philwinkle
¿Es ese un método específico de magento? Recibo un error fatal: Llamar a la función indefinida typeof () cuando lo uso.
Laura
1
Guau. Mi cerebro está frito en Javascript lol :) Lo siento, intente esto:echo get_class($this);
philwinkle
está devolviendo mi clase anulada. es extraño, tengo otro campo que agregué a esta tabla, y usar el setter mágico funciona allí, pero no en este caso.
Laura
1

Necesita vaciar el almacenamiento en caché.

Puede hacer esto a través del backend:

Sistema -> Gestión de caché -> Haga clic en el botón 'Flush Cache Storage'.

CesarScout
fuente