Magento 2 UI Component – Filter on ID Column Based on Text Search

filtermagento2uicomponent

I created a custom Ui-component grid having one column customer_id.

For Customer_id I created a renderer class that gets the name of customer through customer_id.

uicomponennt Column

        <column name="customer_id" class="Ced\CsMarketplace\Ui\Component\Listing\Column\Vendoremail">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Vendor Email</item>
                </item>
            </argument>                                              
        </column>

now When i use filter for this column. it posts customer_id.

I want to search on customer email-id text.

Best Answer

In your Model Collection file you can use _renderFiltersBefore() method. like below i used.

protected function _renderFiltersBefore() {

        $filters = $this->request->getParam('filters');
        if (isset($filters['customer_id'])) { // your filter index in which you want filter callback
            $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

            $customers = $objectManager->get('My\Custom\Model\MyModel')->create()
                    ->getCollection()
                    ->addAttributeToFilter('email', ['like' => '%' . $filters['customer_id'] . '%']);

            $customer_id = array();

            foreach ($customers as $customer) {
                $customer_id[] = $customer->getId();
                $this->getSelect()->orWhere("main_table.customer_id = '" . $customer->getId() . "'");
            }
        }

        parent::_renderFiltersBefore();
}

thanks