1

I'm trying to execute some backend logic via ajax that requires using the Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory collection factory.

When I use ->getColumnValues('<some column>'), I run out of memory if I don't set the php memory limit at 2GB. Most importantly, the memory doesn't clean itself out after code execution.

Before execution: enter image description here

During execution: enter image description here

After execution: enter image description here

The controller in question:

<?php


namespace ...

use Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory as OrderItemCollectionFactory;

class Statistics extends Action
{
    
    public function __construct(
        ...
        OrderItemCollectionFactory $orderItemCollectionFactory,
        ...
    )
    {
        parent::__construct($context);
        ...
        $this->_orderItemCollectionFactory = $orderItemCollectionFactory;
        ...
    }

    public function execute()
    {
        $product_ids = $this->getBrandProductIds();
        $json = $this->_jsonFactory->create();
        return $json->setData([
            'test' => $this->_orderItemCollectionFactory->create()
                ->addFieldToFilter('product_id', ['in' => $product_ids])
                ->getColumnValues('order_id')
        ]);
    }
}
2
  • Did you try printing the data before setting it into json to see if it contains the only data you require and not extra data. Commented Nov 9, 2020 at 11:27
  • @AbdulSamadAbbasi After further investigation, even the ->count() method, which I need later on, overflows the memory
    – Badong
    Commented Nov 9, 2020 at 12:40

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.