Magento 2 – Add Quote ID in Sales Order Grid

magento2order-gridsales-order

I am trying to display quote id of an order in the sales order grid. New field is getting displayed in the grid. However the value of the quote id is not getting populated in the grid against each order.

How to show the quote id from the sales. I believe di.xml needs to be added for it work. I am not sure how the di.xml needs to be.

Here is the code view\adminhtml\ui_component\sales_order_grid.xml

<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd">
<columns name="sales_order_columns">
    <column name="quote_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Quote Id</item>
            </item>
        </argument>
    </column>
</columns>
</listing>

Best Answer

Add sequence tag inside module.xml

<sequence>
    <module name="Magento_Sales"/>
</sequence>

Create Vendor/Module/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="sales_order_grid_data_source" xsi:type="string">Vendor\Module\Model\ResourceModel\Order\Grid\Collection</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="Vendor\Module\Model\ResourceModel\Order\Grid\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">sales_order_grid</argument>
            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
        </arguments>
    </virtualType>
</config>

Create Vendor/Module/Model/ResourceModel/Order/Grid/Collection.php

namespace Vendor\Module\Model\ResourceModel\Order\Grid;

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

class Collection extends SearchResult
{
    protected function _initSelect()
    {
        parent::_initSelect();
        $this->join(
            [$this->getTable('sales_order')],
            'main_table.entity_id = '.$this->getTable('sales_order').'.entity_id',
            array('quote_id')
        );

        return $this;
    }
}

Run following command and clear cache

php bin/magento setup:upgrade