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?


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!


¿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?


¿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'.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.