Атрибут не загружен в Список продуктов и многоуровневую навигацию


У меня есть система разработки, здесь все работает так, как ожидалось. И у меня есть промежуточная система, здесь атрибут не загружен. Такое ощущение, что система не знает, что атрибут не существует в хранилище/attribute_set/...?

У меня есть атрибут artist_id, и этот атрибут не загружен.

Коллекции инициализируются атрибутом:

if (!is_null($this->_productCollection)) {
    return $this->_productCollection;
}
$collection = parent::_getProductCollection();
$collection->addAttributeToSelect('artist_id');

Я проверил, есть ли атрибут в коллекции, и он является:

[_selectAttributes:protected] => Array
    (
        [name] => 71
        [short_description] => 73
        [price] => 75
        [special_price] => 76
        [special_from_date] => 77
        [special_to_date] => 78
        [small_image] => 86
        [thumbnail] => 87
        [news_from_date] => 93
        [news_to_date] => 94
        [status] => 96
        [url_key] => 97
        [required_options] => 110
        [image_label] => 112
        [small_image_label] => 113
        [thumbnail_label] => 114
        [msrp_enabled] => 118
        [msrp_display_actual_price_type] => 119
        [msrp] => 120
        [tax_class_id] => 122
        [price_type] => 124
        [weight_type] => 126
        [price_view] => 127
        [shipment_type] => 128
        [links_purchased_separately] => 129
        [links_exist] => 132
        [artist_id] => 146
    )

Но когда я пытаюсь получить $_product->getArtistId(), идентификатора нет.

Отладка в этой системе действительно сложна. Я попытался найти ту часть, где строится запрос, но пока не нашел ее.

ОБНОВЛЕНИЕ: Плоские таблицы отключены.

А теперь плохая часть: Немного

<?php $_product->load($_product->getId()); ?>

В foreach из product/list.phtml устраняет проблему;-)

Честно говоря: я думаю, что я что-то сломал в базе данных, меняя настройки непосредственно в таблицах.

Есть ли какие-либо связь между атрибутами и хранилищами?
Есть какие-нибудь идеи по этой проблеме?

Author: 7ochem, 2013-02-13

6 answers

Взгляните на настройки атрибутов, убедитесь, что "Отображается на странице просмотра продукта в интерфейсе" - да, и "Использовать в многоуровневой навигации" - тоже да (только если атрибут раскрывающийся)

ОБНОВЛЕНИЕ:

Еще одна вещь, которую вы можете попробовать, это добавить:

    <product>
        <collection>
            <attributes>
                <artist_id/>
            </attributes>
        </collection>
    </product>

В config.xml модуля, в разделе .

 3
Author: Petar Dzhambazov, 2013-02-13 22:20:44

Если он работает на разработчике, но не на промежуточной стадии, а база кода является точной копией, то ваша проблема заключается в самой вашей базе данных.

Вы можете очень легко подтвердить это, заменив свою промежуточную базу данных на базу данных разработки и посмотреть, произойдет ли это по-прежнему.

То, что вы описываете, просто не должно происходить, если вы не вносили ручные изменения в базу данных - или код отличается на ваших двух сайтах.

 2
Author: Ben Lessani - Sonassi, 2013-02-14 08:40:27

Есть ли значение по умолчанию для этого атрибута в таблице EAV? Взгляните на этот запрос:

SELECT
  `t_d`.`entity_id`,
  `t_d`.`attribute_id`,
  `t_d`.`value` AS `default_value`,
  `t_s`.`value` AS `store_value`,
  IF(t_s.value_id IS NULL, t_d.value, t_s.value) AS `value`
FROM `catalog_product_entity_varchar` AS `t_d`
LEFT JOIN `catalog_product_entity_varchar` AS `t_s`
  ON t_s.attribute_id = t_d.attribute_id AND t_s.entity_id = t_d.entity_id AND t_s.store_id = 3
...

Именно так Magento загружает каждый атрибут EAV в коллекции. Как вы видите, если для хранилища по умолчанию не задано значение (нет записи в базе данных, NULL будет в порядке), первая часть запроса не вернет результата, ЛЕВОЕ СОЕДИНЕНИЕ не будет работать, и ваш атрибут не будет загружен - даже если у вас есть значение для конкретного хранилища.

К сожалению, я уже сталкивался с этим однажды, мы сделали что-то не так с импортом, и мне пришлось довольно много отлаживать, пока я наконец не понял, что произошло. Может быть, проверьте свою базу данных.

 1
Author: fmrng, 2013-02-13 21:42:46

Я совершенно НЕ представляю, как это произошло, вот конец истории:

backend_type было varchar вместо int.

Для меня очевидно, что коллекция не может загрузить artist_id, если magento не знает, где искать значение, но почему $_product->load() может получить значение? Я должен это расследовать.

 1
Author: Fabian Blechschmidt, 2013-02-18 17:23:26

Может быть, попробуем:

$product->getData('artist_id');
 0
Author: LDusan, 2013-02-13 19:20:21

Проверьте, добавлен ли атрибут ('artist_id') в набор атрибутов , к которому принадлежит конкретный продукт.

 0
Author: Rohit S, 2013-02-14 07:25:20