Cột mới được thêm vào bảng không lưu


8

Tôi đã thêm một cột mới vào bảng newsletter_subscacker, 'artist_followed'. trong Mage_Newsletter_Model_Subscriberlớp mô hình bị ghi đè của tôi , tôi đã thêm chức năng sau:

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

mọi thứ đều ổn, không có lỗi nào được đưa ra, nhưng khi tôi tìm trong cơ sở dữ liệu, cột mới không được điền.

Bảng của tôi là:

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

Tôi đang suy nghĩ về điều này. Có ý kiến ​​gì không? Tôi có thiếu một cái gì đó hoàn toàn rõ ràng?


Tôi có cùng một vấn đề. Đã thêm một thuộc tính (cột) trong SalesRule, mặc dù mô hình có trường đó được đặt chính xác, nó không bao giờ cập nhật cơ sở dữ liệu.
Vicary

Nếu ai đó sử dụng n98-magerun, có lẽ điều này có thể giúp: ./n98-magerun cache:flush:)
Attila Naghi

Câu trả lời:


41

Một vấn đề khác có thể là:

Zend_Db lưu trữ cấu trúc của các bảng cơ sở dữ liệu. Nếu bạn thêm một cột mới, hãy làm mới bộ đệm và Zend biết để điền vào bảng.

Ngay cả khi bạn đã tắt tất cả bộ đệm, cấu trúc cơ sở dữ liệu và thông tin khác vẫn có thể được lưu vào bộ đệm.

Cảm ơn james.c.funk

Hãy chắc chắn rằng bạn xóa mọi thứ trong đó var/cache, điều này xảy ra, khi bạn nhấn nút ở trên cùng nhưng KHÔNG khi bạn kiểm tra tất cả các hộp kiểm và làm mới chúng!


bạn có nghĩa là bộ nhớ cache magento? hoặc có một bộ đệm khác chỉ dành cho zend?
Laura

Tôi có cùng một vấn đề, nhưng xóa bộ nhớ cache không hoạt động đối với tôi.
Vicary

3
Đã khắc phục sự cố tôi gặp phải, chỉ cần tôi xóa cả Bộ nhớ cache và Bộ lưu trữ Magento!
NathanielR

1
Thnx @FabianBlechschmidt điều này đã khiến tôi phát điên
BlueC

1
Hãy ngừng cảm ơn tôi trong các ý kiến ​​nhưng thay vào đó upvote. Chúng tôi cần phần bình luận cho ý kiến ​​thực tế :-)
Fabian Blechschmidt

2

ok, tôi đã làm cho nó hoạt động bằng cách thay đổi $this->setArtistsFollowed($artist)thành $this->setData('artists_followed', $artist). Tôi không chắc tại sao điều đó làm việc mặc dù? Điều gì đã xảy ra với setter ma thuật trong trường hợp này?


"Echo typeof" ($ this) là gì; " trở về?
philwinkle

đó có phải là một phương pháp dành riêng cho magento không? Tôi đang gặp lỗi nghiêm trọng: Gọi đến hàm không xác định typeof () khi tôi sử dụng.
Laura

1
Ồ Bộ não của tôi bị echo get_class($this);
xáo

nó trả lại lớp bị ghi đè của tôi. thật kỳ lạ, tôi có một lĩnh vực khác mà tôi đã thêm vào bảng này và sử dụng trình thiết lập ma thuật hoạt động ở đó, chỉ trong trường hợp này.
Laura

1

Bạn cần Flush Cache Storage.

Bạn có thể làm điều này thông qua phụ trợ:

Hệ thống -> Quản lý bộ đệm -> Nhấp vào nút 'Lưu trữ bộ nhớ cache'.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.