17

I'd like to add an attribute to products, and I want to do this programmatically. So I added a mysql-install-0.1.0.php to a module of mine, and I added this (inspired from existing examples) :

<?php $installer = $this; $installer->startSetup(); $installer->addAttribute('catalog_product', 'collection', array( 'type' => 'varchar', 'backend' => '', 'frontend' => '', 'label' => 'Collection', 'input' => 'text', 'class' => '', 'source' => '', 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 'visible' => false, 'required' => false, 'user_defined' => false, 'default' => '', 'searchable' => false, 'filterable' => false, 'comparable' => false, 'visible_on_front' => false, 'unique' => false, 'apply_to' => '', 'is_configurable' => false )); $installer->endSetup(); 

Syntax seems OK, but when it comes to execute this part of the code, here is the problem :

Fatal error: Call to undefined method Mage_Core_Model_Resource_Setup::addAttribute() in /home/frleq/Dev/projets/AVIP/WORKSPACE/avip_magento/app/code/local/Smile/Magentaho/sql/magentaho_setup/mysql4-install-0.1.0.php on line 7

Do you see what's wrong? Code isn't so complicated, and it is inspired from existing and worling ones...

Thank you

2 Answers 2

28

You are using the wrong setup class. Check your setup class declaration in config.xml. You are using Mage_Core_Model_Resource_Setup. Try Mage_Eav_Model_Entity_Setup instead.

Sign up to request clarification or add additional context in comments.

4 Comments

That's right, I forgot to mention the Setup class in config.xml: <setup> <module>Company_Module</module> <class>Mage_Eav_Model_Entity_Setup</class> </setup> Thanks a lot Anders
Don't! Use Mage_Catalog_Model_Resource_Setup instead of Mage_Eav_Model_Entity_Setup regarding Products/Catalog attributes or their additional attributes won't be set (i.e. "is_searchable", "is_visible_on_front" etc.) because of the _prepareValues() method in the setup class.
What if you need to use both?
@surfeur190, in your install script, use $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $setup->addAttribute(...
13

If you want to use product-related options (filterable, searchable etc.), you should use Mage_Catalog_Model_Resource_Eav_Mysql4_Setup class.

In latest versions of Magento you should use Mage_Catalog_Model_Resource_Setup class.

1 Comment

Best answer! To be able to set the product specific settings like visible_on_front, you'll need to use a Mage_Catalog_* setup class.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.