Magento – Getting “Fatal error” in adding a customer attribute

customermagento-1.9module

Currently I am trying to add a customer attribute but getting the following error:

Fatal error: Class 'XXXXX_CustomerField_Model_Entity_Setup' not found
in /app/code/core/Mage/Core/Model/Resource/Setup.php on line 234 Call
Stack

Here is my module: local/XXXX/CustomerField/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <XXXX_CustomerField>
            <version>0.1.0</version>
        </XXXX_CustomerField>
    </modules>
    <global>
        <models>
            <XXXX_CustomerField>
                <class>Napit_CustomerField_Model</class>
            </XXXX_CustomerField>
        </models>
        <resources>
            <customerfield_setup>
                <setup>
                    <module>XXXX_CustomerField</module>
                <class>XXXX_CustomerField_Model_Resource_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </customerfield_setup>
        </resources>
        <fieldsets>
       <checkout_onepage_quote>
         <customer_membership_no>
             <to_customer>membership_no</to_customer>
         </customer_membership_no>
       </checkout_onepage_quote>
        <customer_account>
            <membership_no>
                <to_quote>customer_membership_no</to_quote>
            </membership_no>
        </customer_account>
      </fieldsets>
    </global>
</config>

local/XXXX/CustomerField/Model/Resource/Setup.php

<?php
class XXXX_CustomerField_Model_Resource_Setup extends Mage_Customer_Model_Entity_Setup 
{
    public function getDefaultEntities()
    {

        return array(

            'membership_no'=>array(
                    'type'=> 'static',
                    'label'=> 'Membership Number',
                    'visiable' => true,
                    'required' => false,
                    'sort_order' => 80,
            ),
        );
    }
}

and local/XXXX/CustomerField/sql/customerfield_setup/install-0.1.0.php

<?php

$installer = $this;
$installer->startSetup();

$installer->addAttribute('customer', 'membership_no', array(
    'label' => 'Membership Number',
    'visible' => 1,
    'required' => 0,
    'position' => 1,
    'sort_order' => 80,
));

$installer->endSetup();

$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'membership_no');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save();

Thanks

***** EDIT *****

So my problem was the folder path of was entity/setup where as it was calling resource/setup, I've made the amends now getting another error:

Fatal error: Call to a member function getColumns() on a non-object
in lib/Varien/Db/Adapter/Pdo/Mysql.php on line 2201

Best Answer

Firstly I had config looking for entity_setup when my folder structure was resource_setup.

The next error came because I had to create an instance of Mage_Eav_Model_Entity_Setup this was done using:

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
Related Topic