Проверьте наличие столбца в таблице прослушивания клиентов


Я пишу код для создания файла sql, чтобы добавить столбец в customer eav table. Я хочу проверить, существует ли это поле в таблице клиентов или нет.

Вот мой код для создания этого поля>>

$setup = Mage::getModel('customer/entity_setup', 'core_setup');
$setup->addAttribute('customer', 'nationalcode', array(
    'type' => 'varchar',
    'input' => 'text',
    'label' => 'national code',
    'global' => 1,
    'visible' => 1,
    'required' => 0,
    'default' => '',
    'user_defined' => 1,
    'visible_on_front' => 1,
));

Что я должен добавить в этот код, чтобы проверить наличие поля "национальный код" перед его созданием?

Author: Alireza Amiri, 2014-04-16

1 answers

Вы уже довольно близки к ответу. Mage_Eav_Model_Entity_Setup::addAttribute() содержит саму проверку, чтобы определить, является ли операция вставкой или обновлением:

public function addAttribute($entityTypeId, $code, array $attr)
{
    $entityTypeId = $this->getEntityTypeId($entityTypeId);
    $data = array_merge(
        array(
            'entity_type_id' => $entityTypeId,
            'attribute_code' => $code
        ),
        $this->_prepareValues($attr)
     );

    $this->_validateAttributeData($data);

    $sortOrder = isset($attr['sort_order']) ? $attr['sort_order'] : null;
    $attributeId = $this->getAttribute($entityTypeId, $code, 'attribute_id');
    if ($attributeId) {
        $this->updateAttribute($entityTypeId, $attributeId, $data, null, $sortOrder);
    } else {
        $this->_insertAttribute($data);
    }
    //snip...
}

Как вы можете видеть, ваш экземпляр класса установщика (Mage_Customer_Model_Entity_Setup) имеет необходимый метод.

//Returns associative array if attribute exists, null if not
$installer->getAttribute('customer','nationalcode');

Тем не менее, вы можете видеть важность кодов атрибутов пространства имен. Всегда полезно проверить, но aamiri_nationalcode было бы "более безопасным" выбором.

 6
Author: benmarks, 2014-04-16 10:10:59