Following this answer: How to join order grid collection to custom table in Magento2? I'm able to join the order custom attribute and show it in the column, the error comes with the filter when applied:
INNER JOIN
mgnt_sales_orderASsoON main_table.entity_id = so.entity_id WHERE (custom_attributeLIKE '%testing the filter%')Integrity constraint violation: 1052 Column 'custom_attribute' in where clause is ambiguous
This is because the field is actually in the sales_order table and not sales_order_grid
view/adminhtml/ui_component/sales_order_grid.xml
<columns name="sales_order_columns"> <column name="custom_attribute"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="visible" xsi:type="boolean">true</item> <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Custom Attribute</item> </item> </argument> </column> </columns> Plugins/AddColumnsSalesOrderGridCollection.php
<?php namespace Vendor\Module\Plugins; use Magento\Framework\Message\ManagerInterface as MessageManager; use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as SalesOrderGridCollection; class AddColumnsSalesOrderGridCollection { private $messageManager; private $collection; public function __construct(MessageManager $messageManager, SalesOrderGridCollection $collection ) { $this->messageManager = $messageManager; $this->collection = $collection; } public function aroundGetReport( \Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory $subject, \Closure $proceed, $requestName ) { $result = $proceed($requestName); $tableSalesOrder = $this->collection->getResource()->getTable('sales_order'); if ($requestName == 'sales_order_grid_data_source') { if ($result instanceof $this->collection) { $select = $this->collection->getSelect(); $select->join( ["so" => $tableSalesOrder], 'main_table.entity_id = so.entity_id', array('so.custom_attribute') ) ->distinct(); } } return $this->collection; } } Goal: Filter the orders grid by a custom attribute of the order.
Unfortunally the solution with the plugin above creates other problems in the order view.. that's why I'm looking for other solutions