How to Write Data to Custom Database Table and Create a Custom Collection in Magento 2

If you want to use your custom data, you’ll want to generate a custom collection. StackOverflow is flooded (ha! Pun-intended) with answers advising you to use the object manager, but as a wise man once told me:

“using the object manager’s baaad, mkay?”

— Mr. Mackey

The right way to generate a collection from your custom data in your Magento 2 module is using a Factory.

  • The Wait is Over!

  • Generate a Custom Collection from a Database Table using a Factory in Magento 2

    To gain access to your custom data, you have to define your data as a collection. Tell Magento 2 where your Data-model and its corresponding ResourceModel are:

    DaanvdB/ProductQty/Model/ResourceModel/Data/Collection.php
    <?php
    namespace DaanvdB\ProductQty\Model\ResourceModel\Data;
    use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
    class Collection extends AbstractCollection {
    public function _construct() {
    $this->_init( "DaanvdB\ProductQty\Model\Data", "DaanvdB\ProductQty\Model\ResourceModel\Data" );
    }
    }

    If we want to show the data in a Block, Magento 2 allows us to use our Custom Collection to get the data from our Custom Database Table:

    DaanvdB/ProductQty/Block/Data.php
    <?php
    namespace DaanvdB\ProductQty\Block;
    use Magento\Framework\View\Element\Template;
    use DaanvdB\ProductQty\Model\DataFactory;
    class Data extends Template {
    protected $dataFactory;
    public function __construct(
    Template\Context $context,
    DataFactory $dataFactory
    ) {
    $this->dataFactory = $dataFactory;
    parent::__construct(
    $context
    );
    }
    public function showData() {
    $collection = $this->dataFactory->create()->getCollection();
    $data = $collection->getData();
    return $data;
    }
    }
    view raw Block-Data.php hosted with ❤ by GitHub

    These are the fundamentals for creating a Magento 2 module which allows you to create a custom database table, write data to it and create a custom collection using a factory — and NOT the ObjectManager. I hope it was useful to you. If you have any remarks or questions or just want to compliment me, leave a comment!

    ❤️ it? Share it!

    Leave a Comment

    Your email address will not be published.

    This site uses Akismet to reduce spam. Learn how your comment data is processed.