Атрибут Magento, созданный пользователем для товаров, не сохраняется - PullRequest
0 голосов
/ 10 марта 2010

Я борюсь с кажущейся простой вещью уже около двух дней. Я надеюсь, что кто-то может помочь.

Я создал атрибут myUpdate EAV

class Company_Module_Model_Resource_Eav_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
{
    public function getDefaultEntities()
    {
        return array(
            'catalog_product' => array(
                'entity_model'      => 'catalog/product',
                'attribute_model'   => 'catalog/resource_eav_attribute',
                'table'             => 'catalog/product',
                'additional_attribute_table' => 'catalog/eav_attribute',
                'entity_attribute_collection' => 'catalog/product_attribute_collection',
                'attributes'        => array(
                    'my_update' => array(
                        'label'             => 'My timestamp',
                        'type'              => 'datetime',
                        'input'             => 'date',
                        'default'           => '',
                        'class'             => 'validate-date',
                        'backend'           => 'eav/entity_attribute_backend_datetime',
                        'frontend'          => '',
                        'table'             => '',
                        'source'            => '',
                        'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
                        'visible'           => true,
                        'required'          => false,
                        'user_defined'      => true,
                        'searchable'        => false,
                        'filterable'        => false,
                        'comparable'        => false,
                        'visible_on_front'  => false,
                        'visible_in_advanced_search' => false,
                        'unique'            => false,
                        'apply_to'          => 'simple',
                    )
                )
            )
        );
    }
}

Атрибут создан ОК и при установке правильно отображается в списке атрибутов.

Позже я делаю

// for product 1
$product->setMyUpdate($stringDate); // string this format: yyyy-MM-dd HH:mm:ss
$product->save(); // and saves without issues * in admin module

Но позже, когда я это сделаю:

$product = Mage::getModel('catalog/product')->load(1);
var_dump($product->getMyUpdate()); // returns null

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 марта 2010

В базе данных атрибут должен быть сохранен в таблице catalog_product_entity_datetime, организованной по его attribute_id. Сначала получите entity_type_id (поскольку мой, очевидно, отличается от вашего):

select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product';

Я получаю 4 на последнем, но заменяю при необходимости. В следующем запросе должны быть перечислены все сохраненные значения:

select * from catalog_product_entity_datetime where attribute_id = (select attribute_id from eav_attribute where entity_type_id = 4 and attribute_code = 'my_update');

Чтобы убедиться, что вы действительно добавили атрибут в базу данных:

select attribute_id from eav_attribute where entity_type_id = 4 and attribute_code = 'my_update'

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

$collection->addAttributeToSelect("my_update");

Пожалуйста, дайте больше информации о загрузке вашего продукта, если вы видите, что данные действительно сохранены.

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

Спасибо! Джо

1 голос
/ 10 марта 2010

Ваши атрибуты не сохраняются по умолчанию. Ты можешь использовать: $product->getResource()->saveAttribute($product, "name_of_your_attribute");

...