Skip to main content
7 of 7
removed superfluous code

Large Collection Exhausting Memory

I am writing an admin module. I created a collection and if the number of rows in the table are small it loads fine. Ultimately the table will have 250k rows in it and when I attempt to load the collection it exhausts memory. I was under the impression that Magento would lazy load collections. I also will probably need to know how to use the resource iterator in mage 2 as well. I can provide code samples but there is little more than a basic module skeleton at this point. I would greatly appreciate a code example of how to handle and iterate through a large collection.

Note: the collection is pulling from a custom table

###Controller:

<?php
namespace Customer\Customerimportexport\Controller\Adminhtml\Import;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Customer\Customerimportexport\Model\WebcustomersFactory;

class Index extends \Magento\Backend\App\Action
{
    
    protected $_modelWebcustomersFactory;

    public function __construct(
        Context $context,
        WebcustomersFactory $modelWebcustomersFactory
    ) {
        parent::__construct($context);
        $this->_modelWebcustomersFactory = $modelWebcustomersFactory;
    }

    public function execute()
    {

        $webcustomersModel = $this->_modelWebcustomersFactory->create();
 
        // Get webcustomers collection
        $webcustomersCollection = $webcustomersModel->getCollection();

        // Load all data of collection
        foreach ($webcustomersModel->getCollection() as $key => $webcustomer) {
            var_dump($webcustomer->getData());
            die();
        }

        $this->_view->loadLayout();
        $this->_view->renderLayout();
    }

}

###Model

<?php

namespace Customer\Customerimportexport\Model;

use \Magento\Framework\Model\AbstractModel;
 
class Webcustomers extends AbstractModel
{
    /**
     * Define resource model
     */
    protected function _construct()
    {
        $this->_init('Customer\Customerimportexport\Model\ResourceModel\Webcustomers');
    }
}

###Resource Model

<?php
 
namespace Customer\Customerimportexport\Model\ResourceModel;
 
class Webcustomers extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
    /**
     * Define main table
     */
    protected function _construct()
    {
        $this->_init('web_customers', 'entity_id');
    }
}

###Collection

<?php 

namespace Customer\Customerimportexport\Model\ResourceModel\Webcustomers;

use \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
 
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
    /**
     * Define model & resource model
     */
    protected function _construct()
    {
        $this->_init(
            'Customer\Customerimportexport\Model\Webcustomers',
            'Customer\Customerimportexport\Model\ResourceModel\Webcustomers'
        );
    }
}