テーブルに追加された新しい列は保存されません


8

newsletter_subscriberテーブルに「artists_followed」という新しい列を追加しました。オーバーライドしたMage_Newsletter_Model_Subscriberモデルクラスに、次の関数を追加しました。

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

すべて正常に実行され、エラーはスローされませんが、データベースを見ると、新しい列にデータが入力されていません。

私のテーブルは:

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

私はこれに頭を悩ませています。何か案は?私は完全に明白な何かを見逃していますか?


同じ問題があります。モデルにそのフィールドが正しく設定されているにもかかわらず、SalesRuleに属性(列)が追加されましたが、データベースは更新されません。
Vicary 2014

誰かがn98-magerunを使用している場合、これが役立つ可能性があります。./n98-magerun cache:flush:)
Attila

回答:


41

別の問題は次のとおりです。

Zend_Dbはデータベーステーブルの構造をキャッシュしました。新しい列を追加する場合は、キャッシュを更新すると、Zendがテーブルを埋めることを認識します。

すべてのキャッシュを無効にしても、データベースの構造やその他の情報がキャッシュされる可能性があります。

ありがとうjames.c.funk

ですべてを削除してくださいvar/cache。これは、上部のボタンを押したときに発生しますが、すべてのチェックボックスをオンにしてそれらを更新したときではありません。


あなたはmagentoキャッシュを意味しますか?または、Zend専用の別のキャッシュはありますか?
ローラ

同じ問題がありますが、キャッシュをクリアしてもうまくいきません。
Vicary 2014

3
私が直面していた問題を修正しました。キャッシュストレージとMagentoストレージの両方をフラッシュする必要がありました!
NathanielR 2015年

1
Thnx @FabianBlechschmidtこれは私を狂わせた
BlueC '13 / 06/13

1
コメントで私に感謝するのをやめてください、代わりに賛成してください。実際のコメントにはコメントセクションが必要です:-)
Fabian Blechschmidt

2

はい、に変更$this->setArtistsFollowed($artist)して動作させました$this->setData('artists_followed', $artist)。それがうまくいった理由はわかりませんか?この場合、マジックセッターはどうなりましたか?


「echo typeof($ this);」とは何ですか 戻る?
philwinkle 2013

それはマゼント固有の方法ですか?致命的なエラーが発生します:使用すると未定義の関数typeof()が呼び出されます。
ローラ

1
ワオ。私の脳はJavascriptで揚げていますlol :)すみません、これを試してください:echo get_class($this);
philwinkle

オーバーライドされたクラスを返します。奇妙なことに、このテーブルに追加した別のフィールドがあり、マジックセッターを使用すると、このインスタンスでは機能しません。
ローラ

1

キャッシュストレージフラッシュする必要があります。

これはバックエンドから行うことができます:

システム->キャッシュ管理-> [キャッシュストレージのフラッシュ]ボタンをクリックします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.