Magento, проблема с catalog_product_flat - PullRequest
1 голос
/ 04 марта 2011

У нас есть веб-сайт с 2 магазинами: FR и EN.Для некоторых продуктов после импорта catalog_product_flat для EN представление магазина не обновляется.В таблицах EAV все хорошо.Повторный индекс данных должен усекать эту плоскую таблицу и заполнять ее обновленными данными.Почему-то это не работает для некоторых предметов.

У кого-нибудь из вас была подобная проблема?Буду признателен за любые подсказки или советы по этой теме.

РЕДАКТИРОВАТЬ

Я сделал дополнительные проверки, и я был неправ в отношении таблиц EAV.Оказывается, что catalog_product_entity_varchar соответствует catalog_product_flat.Таким образом, плоская таблица содержит те же данные, что и таблица EAV, но в панели администратора значения неверны.Для представления магазина EN они такие же, как значения по умолчанию, только для некоторых продуктов (магия?;)).На моем локальном ПК такой проблемы не возникало.Это только в нашей производственной среде.Насколько я знаю, мы не используем репликацию БД (что может быть проблемой здесь).

Ответы [ 3 ]

3 голосов
/ 13 октября 2011

Модель базы данных EAV используется Magento для простого обновления и разработки, поскольку эта модель дает больше гибкости для работы с данными и атрибутами.

Когда плоский каталог включен в Magento, тогда все вышеупомянутые атрибуты продукта (id,имя, цена) хранятся в одной таблице с именем, как catalog_product_flat.Затем Magento выбирает данные продукта из плоского стола, а не объединяет все другие меньшие таблицы.

Существует два типа плоского каталога: 1) Плоский каталог товара 2) Плоский каталог Категория

  • Плоские категории рекомендуются для любой установки Magento для повышения производительности.
  • Плоские продукты разработаны и рекомендованы для каталогов, имеющих более 1000 SKU.

Включить категорию плоского каталога:

  • Перейдите в Панель администратора-> Система-> Управление кэшем-> Перестроить категорию плоского каталога
  • Перейдите в Панель администратора-> Система-> Конфигурация-> Каталог-> Внешний интерфейс-> Использовать плоский каталогКатегория = Да

Включить плоский каталог продукта:

  • Перейти в Админ-панель-> Система-> Управление кэш-> Восстановить плоский каталог продукта
  • Перейтив Панель администратора-> Система-> Конфигурация-> Каталог-> Внешний интерфейс-> Использовать плоский каталог продукта = Да

Помните, что изначально список выбора

Панель администратора->Система-> Configuration-> Catalog-> Frontend-> Использовать плоский каталог ИЛИ, Панель администратора-> Система-> Конфигурация-> Каталог-> Frontend-> Использовать плоский каталог Product

не редактируется.Вам нужно перестроить плоский каталог из Cache Management.Только тогда список выбора станет редактируемым.

2 голосов
/ 04 марта 2011

Убедитесь, что при импорте продуктов каталога необходимые атрибуты продуктов снабжены правильными значениями в файле импорта.Если это не сделано должным образом, то повторный индекс данных может работать неправильно.

Также перед повторной индексацией всегда желательно и целесообразно очистить кэш из папки "Cache Management" и из папки "cache" вашего установочного каталога Magento.

Надеюсь, это поможет.

0 голосов
/ 11 марта 2011

Я был неправ насчет того, что не так. И все в порядке с базой данных. Проблема заключалась в порядке атрибутов, которые извлекаются из БД.

В Mage_Eav_Model_Entity_Abstract мы можем найти:


$selects = array();
foreach ($this->getAttributesByTable() as $table=>$attributes) {
   $selects[] = $this->_getLoadAttributesSelect($object, $table);
}
if (!empty($selects)) {
   $values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));

   foreach ($values as $valueRow) {
      $this->_setAttribteValue($object, $valueRow);
   }
}

Строка implode(' UNION ', $selects) объединяет все операторы выбора. Но ORDER BY нет, поэтому данные могут быть получены в произвольном порядке. На самом деле, для некоторых продуктов это так. Этот выбор принимает значения атрибутов для представления магазина 0 (всегда) и выбранного представления магазина (текущий).

Array $values содержит массивы со свойствами атрибутов. Порядок имеет значение здесь, потому что если атрибут (например, «имя») для представления магазина, например. 1 будет продолжаться раньше, чем один для представления магазина 0, затем он будет перезаписан.

Решением является добавление предложения ORDER BY в массив $selects или сортировку $values.

...