If you are working on a custom Magento 2 module, and wondering how to get the collection of records from your custom database table, this article is for you. This is very common that your Magento 2 website needs more database tables than what Magento shipped with. So in a listing page such as blog listing, you need to get the collection of records. To do this in Magento 2 way, follow the article carefully.
We need to create 3 files in order achieve the above.
1) Model , 2) ResourceModel , 3) Collection
For the sake of this example, I assume our namespace would be Mycompany, Module name would be Blog and database table would be blog.
First we create a file for the model at app/code/Mycompany/Blog/Model/Blog.php
<?php namespace Mycompany\Blog\Model; use Magento\Framework\Model\AbstractModel; class Blog extends AbstractModel { /** * Define resource model */ protected function _construct() { $this->_init('Mycompany\Blog\Model\ResourceModel\Blog'); } }
Now create Blog.php ResourceModel at app/code/Mycompany/Blog/Model/ResourceModel/Blog.php
<?php namespace Mycompany\Blog\Model\ResourceModel; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class Blog extends AbstractDb { /** * Define main table */ protected function _construct() { $this->_init('blog', 'id'); // blog is the database table } }
Now create Collection.php Collection file at app/code/Mycompany/Blog/Model/ResourceModel/Blog/Collection.php
This file would be responsible for the collection of records from the database table.
<?php namespace Mycompany\Blog\Model\ResourceModel\Blog; use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; class Collection extends AbstractCollection { /** * Define model & resource model */ protected function _construct() { $this->_init( 'Mycompany\Blog\Model\Blog', 'Mycompany\Blog\Model\ResourceModel\Blog' ); } }
We have finished most of the work , but yet we have to test this feature, and need to see whether our implementation is correct.
To test we will create a controller, in our module. I am not going very deep on the subject how to create a controller. You can read this tutorial for learning how to create a controller in Magento 2.
Create a controller called Index.php at app/code/Mycompany/Blog/Controller/Index/Index.php
<?php namespace Mycompany\Blog\Controller\Index; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Mycompany\Blog\Model\BlogFactory; class Index extends Action { protected $_blogFactory; public function __construct( Context $context, BlogFactory $_blogFactory ) { parent::__construct($context); $this->_blogFactory = $_blogFactory; } public function execute() { $result = $this->_blogFactory->create(); $collection = $result->getCollection(); //Get collection of blog //print the data var_dump($collection->getData()); exit; } }
That’s when you browse http://example/com/blog/index/index, you will see the print of our records from database.
- Just want to thank us? Buy us a Coffee
- May be another day? Shop on Amazon using our links.
Your prices won't change but we get a small commission.
Leave a Reply