Show custom query data in Magento 2 admin grid

980 Views Asked by At

I have created a custom module which stores some data related to the product in a custom collection.

Now to show it as a report in the Magento 2 admin, I need to create a custom query to join it with the customer and product tables and do some aggregate functionality such as count grouped by the product.

Is there a way we can do that using custom SQL query and pass the whole result in the grid and it takes the relevant column names and shows it in the grid?

<?xml version="1.0"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">bargain_offer_listing.bargain_offer_listing_data_source</item>
            <item name="deps" xsi:type="string">bargain_offer_listing.bargain_offer_listing_data_source</item>
            <item name="spinner" xsi:type="string">bargain_offer_listing_columns</item>
        </item>
    </argument>
    <listingToolbar name="listing_top">
        <bookmark name="bookmarks"/>
        <columnsControls name="columns_controls"/>
        <filterSearch name="fulltext"/>
        <filters name="listing_filters"/>
        <paging name="listing_paging"/>
    </listingToolbar>
    <dataSource name="bargain_offer_listing_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">MyModule\Bargain\Ui\DataProvider\OfferListingProvider
            </argument>
            <argument name="name" xsi:type="string">bargain_offer_listing_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">entity_id</argument>
            <argument name="requestFieldName" xsi:type="string">entity_id</argument>
            <argument name="data" xsi:type="array">
                <item name="update_url" xsi:type="url" path="mui/index/render"/>
                <item name="storageConfig" xsi:type="array">
                    <item name="indexField" xsi:type="string">entity_id</item>
                </item>
            </argument>
        </argument>
    </dataSource>
    <columns name="bargain_offer_listing_columns">
        <column name="entity_id">
            <settings>
                <filter>textRange</filter>
                <label translate="true">ID</label>
            </settings>
        </column>
        <column name="product_sku">
            <settings>
                <filter>text</filter>
                <label translate="true">Product Sku</label>
            </settings>
        </column>
        <column name="product_name">
            <settings>
                <filter>text</filter>
                <bodyTmpl>ui/grid/cells/text</bodyTmpl>
                <label translate="true">Product Name</label>
            </settings>
        </column>
        <column name="number_of_buyers">
            <settings>
                <filter>text</filter>
                <label translate="true">No of buyers</label>
            </settings>
        </column>
        <column name="times_bought">
            <settings>
                <filter>text</filter>
                <label translate="true">Times Bought</label>
            </settings>
        </column>
    </columns>
</listing>

This is my data provider class


use Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider;

class OfferListingProvider extends DataProvider
{

}

But I do not know how to utilize this. Any suggestions or guides is appreciated.

0

There are 0 best solutions below