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'
);
}
}