7

I inserted a custom column in quote table like this:

if (version_compare($context->getVersion(), '1.0.1', '<')) {
          $setup->getConnection()->addColumn(
              $setup->getTable('quote'),
              'custom_column',
              [
                  'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                  'nullable' => true,
                  'comment' => 'Custom Column',
             ]
          );
        }

The custom column was successfully created, and added to every single row in quote table with null value, but the problem is, i don't know how to update the custom column data in the quote table by using only quote id

5

The easiest way to solve this is to fill in this field in the quote model and save it using the Repository:

class QuoteUpdater
{
    /**
     * @var \Magento\Quote\Model\QuoteRepository
     */
    protected $quoteRepository;

    /**
     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
     */
    public function __construct(
        \Magento\Quote\Model\QuoteRepository $quoteRepository
    ) {
        $this->quoteRepository = $quoteRepository;
    }

    public function updateQuoteData($quoteId, int $customData)
    {
        $quote = $this->quoteRepository->get($quoteId); // Get quote by id
        $quote->setData('custom_column', $customData); // Fill data
        $this->quoteRepository->save($quote); // Save quote
    }
}
  • How to get the $customData in this repository if it's a form field in addtocart.phtml? – Swetha Apr 12 '18 at 6:13
  • greate job using service contract! – HaFiz Umer Aug 31 at 20:26
2

To set data in quote table, use below code -

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$quoteId = 10;
$customColumnValue = 1; 
$quote = $objectManager->create('Magento\Quote\Model\Quote')->load($quoteId);
$quote->setCustomColumn($customColumnValue);
$quote->save();

Here replace $quoteId variable with your quote ID .

  • 1
    You should not use the ObjectManager directly – Siarhey Uchukhlebau Jun 5 '17 at 11:11
  • 1
    Yes, this is just for an example. We should Inject Object Manager in Constructor first then can use its object in method. 1. declare object: private $_objectManager; 2. Inject in constructor and initialize : public function __construct( \Magento\Framework\ObjectManagerInterface $objectmanager ) { $this->_objectManager = $objectmanager; } – InfoBeans Jun 7 '17 at 11:56
  • Unless its in a plugin.. – DWils Aug 24 '18 at 20:25

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.