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_order
ASso
ON main_table.entity_id = so.entity_id WHERE (custom_attribute
LIKE '%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