2012-04-08 38 views
5

Tôi đã thử thực sự khó hiểu quan hệ cataloginventory_stock - Tôi biết rằng cả hai bảng stock_item cũng như stock_status đều được cập nhật khi một mục cổ phiếu được sửa đổi, nhưng tôi không thể tìm ra liệu bảng stock_status_idx có thực sự cần thiết hay không .Điểm của bảng cataloginventory_stock_status_idx là gì?

Từ những gì tôi có thể thấy, bảng stock_status_idx chứa thông tin giống như bảng stock_status. Nó chỉ là một bảng tạm thời? Tôi không thấy bất kỳ vấn đề nào với tình trạng tồn kho sai nếu tôi cập nhật các bảng stock_item và stock_status theo cách thủ công, nhưng không cập nhật bảng stock_status_idx.

Điều này .. Tôi nghĩ rằng nó được sử dụng bằng cách nào đó để lưu vào bộ nhớ đệm/chỉ mục. Tuy nhiên, ngay cả khi tôi không sửa đổi bảng stock_status_idx, trạng thái cổ phiếu được hiển thị tốt trong phần phụ trợ và trong giao diện người dùng.

Vì vậy, điểm của bảng stock_status_idx là gì?

Cảm ơn bạn rất nhiều vì đã giúp đỡ bạn.

Trả lời

1

Bảng idx chỉ được sử dụng khi Magento cần chọn nhiều sản phẩm dựa trên mục chứng khoán của chúng, vì vậy chỉ mục trên các bảng này nhanh hơn sử dụng bảng khoảng không quảng cáo chính.

Tôi cũng khuyên bạn nên ghi dữ liệu của mình lên bảng này. Hoặc tốt hơn, sử dụng Magento API hoặc Magento App trên PHP để viết vào cơ sở dữ liệu Magento, an toàn hơn nhiều.

+0

Cảm ơn câu trả lời của bạn! Đó không phải là câu trả lời kỹ thuật mà tôi mong đợi. Bạn có biết chức năng nào thực sự tái tạo bảng idx không? Không có vấn đề gì tôi tìm thấy, reindexProducts ($ ids), reindexAll - không có reindexed bảng idx. CHỈ khi tôi lưu sản phẩm trong phần phụ trợ. Nhưng tôi không thể tìm thấy những gì khởi xướng điều này.Ngay cả khi tôi reindex các thực thể chứng khoán trong Magento tại Index Management, nó không làm mới. Cảm ơn! – MageSeb

+0

Cách sử dụng chính xác của bảng này là trong 'Mage_CatalogInventory_Model_Mysql4_Indexer_Stock_Default :: _ prepareIndexTable()' và sản phẩm được cấu hình/nhóm trong các lớp tương ứng của chúng. Tìm kiếm 'getIdxTable()'. Có một cuộc gọi đến 'insertFromSelect' có hiệu quả chèn vào' cataloginventory_stock_status_idx'. –

+0

bảng _idx là các bảng chỉ mục tạm thời trong Magento. I E. chúng được phổ biến trong quá trình reindex và sau đó được dọn sạch khi quá trình reindex hoàn tất. – bigtony

0

Tôi đã xem xét điều này vì lý do tương tự (để cập nhật số lượng cổ phiếu trực tiếp trong Mysql) và sẽ sử dụng tính năng lập chỉ mục được xây dựng trong Magento với "cataloginventory_stock". Tôi thích tính năng này vì nó chỉ mất vài giây để chạy trên máy chủ của tôi.

bạn có thể đạt được indexer magento và nhận được một số thông tin thoải mái

/[nhà cửa hàng của bạn]/vỏ sau đó chạy:/usr/bin/php -f thông tin indexer.php

đây là crontab dòng để chạy chỉ mục kiểm kê lại danh mục: 30 3 * * */usr/bin/php -f /home/client/www/shell/indexer.php - --reindex cataloginventory_stock

3

Tôi đã tự hỏi cùng một câu hỏi và quyết định đào khi tôi không thể tìm thấy câu trả lời ở bất cứ đâu. Dường như _tmp và _idx được sử dụng làm chủ sở hữu tạm thời cho dữ liệu được lập chỉ mục của bạn.

Ví dụ, bạn có thể nhìn vào reindexAll() phương pháp trong app/code/core/Mage/Catalog/Model/Resource/Category/Indexer/Product.php và bạn sẽ hiểu rằng nó được sử dụng bảng _idx để tạm thời lưu trữ dữ liệu của nó khi tạo các chỉ số:

$this->useIdxTable(true); 
... 
$idxTable = $this->getIdxTable(); 
.... 
$query = $select->insertFromSelect($idxTable, ... 

Vào cuối cùng một phương pháp bạn sẽ nhận thấy một cuộc gọi phương thức $this->syncData() tốt đẹp. Bạn có thể đoán nó! Hàm này hoạt động trong app/code/core/Mage/Index/Model/Resource/Abstract.php và đang thực hiện điều đó, đồng bộ hóa _idx với chính:

$this->_getWriteAdapter()->delete($this->getMainTable()); 
$this->insertFromTable($this->getIdxTable(), $this->getMainTable(), false); 
$this->commit(); 

Chúc bạn may mắn!

+0

Câu trả lời này sẽ được chấp nhận. Cảm ơn! Câu trả lời tương tự nói cách khác: http://magento.stackexchange.com/a/35518/6291 – Phil