I want to save some custom data to quote and order item, when a product is added to cart. I have a custom controller with an addtocartAction where i do the following:

$cart->addProduct($product, array(
    'qty' => $params['qty'] ? $params['qty'] : 1

The action is called via ajax with some data i have to save to the quote item. Where can i do that? Adding the custom attribute to the quote item is not the problem, but changing the value of the attribute. The Product can be more than one time in cart, but with different attribute values in the quote item.


Instead of using a custom controller it's easier (and perhaps cleaner) to do this from a controller. So, we'll need to build a little module for that


<?xml version="1.0"?>

your setup script

$installer = $this;
$installer->getConnection()->addColumn($this->getTable('sales_flat_quote_item'), 'custom_attribute_column', 'varchar(255) NOT NULL');
$installer->getConnection()->addColumn($this->getTable('sales_flat_order_item'), 'custom_attribute_column', 'varchar(255) NOT NULL');

And the observer [Namespace]/[Module]/Model/Observer.php

class [Namespace]_[Module]_Model_Observer
    public function checkoutCartProductAddAfter($observer)
        $item = $observer->getEvent()->getQuoteItem();
        $item->setData('custom_attribute_column', 'the value');

        return $this;
  • 1
    this is good one May 21 '15 at 8:38
  • Useful. I have one check point here. In observer, how can I get list of custom options associated for the products I am adding to cart in checkout_cart_product_add_after event?
    – Butterfly
    Aug 24 '16 at 19:03
  • @invissible I'm guessing it differs per product, printing it in the observer would be an option
    – Sander Mangel
    Aug 25 '16 at 6:31
  • @SanderMangel yes I am trying to print it in observer only. Here you are using $item->setData('custom_attribute_column', 'the value'); but custom options will not get variable name right? We are getting it as option['<ID_NUMBER>']
    – Butterfly
    Aug 25 '16 at 7:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.