как установить уникальное поле в моем пользовательском модуле


Я использую magento 1.9.2.4

Мне нужно одно уникальное и обязательное поле в моей форме пользовательского модуля

Я использую приведенный ниже код для поля формы

class Test_Brand_Block_Adminhtml_Brand_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
 {
            protected function _prepareForm()
            {   
                $model = Mage::registry('test_brand');
                $fieldset->addField('option_identifier', 'text', array(
                'name'      => 'option_identifier',
                'label'     => Mage::helper('checkout')->__('Option Identifier'),
                'title'     => Mage::helper('checkout')->__('Option Identifier'),
                'required'  => true,
                ));
             }


}
Author: Prashant Valanda, 2016-12-15

2 answers

Используя 'required' => true, в поле формы, вы можете сделать поле обязательным. Но вы не можете сделать значение поля уникальным без пользовательского кода.

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

public function postAction()
    {
        $post = $this->getRequest()->getPost();
        if ( $post ) {
            if($this->getRequest()->getPost('your-field')){
                $collection = Mage::getModel('yourmodel/yourmodel')->getCollection();
                $collection->addFieldToFilter('your-field',$this->getRequest()->getPost('your-field'));
                if(count($collection)){
                    Mage::getSingleton('customer/session')->addError(Mage::helper('yourhelper')->__('your-field name is not unique'));
                    $this->_redirect('*/*/');
                    return;
                }
            }
        }
    }

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

 1
Author: Prashant Valanda, 2016-12-15 08:58:17

Лучший способ:

1) Добавьте это в исходную модель.

protected function _construct()
{
    $this->_init("your_module/your_model", "super_id");

    $this->addUniqueField(array(
        'field' => 'name',
        'title' => Mage::helper('loyalty')->__('This name has already been taken.')
    ));
}

2: Попробуйте перехватить исключения из исключения Mage_Core_Exception

try {
    $model = Mage::getModel("your_module/your_model")->load('some_id');
    $model->setName('I am bad man!');
    $model->save();

} catch (Mage_Core_Exception $e) {
    Mage::getSingleton("adminhtml/session")->addError(
    $e->getMessage()
);
 1
Author: Arni, 2018-03-08 20:20:09