【发布时间】:2022-11-22 16:54:21
【问题描述】:
我在 XML 的销售订单网格中添加了一个产品名称列,它在网格上正确显示,但如果我以过滤器形式使用它,它会给出错误“出了点问题”,错误日志有以下错误
main.CRITICAL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'products' in 'where clause', query was: SELECT COUNT(*) FROM `sales_order_grid` AS `main_table` WHERE (((`products` LIKE '%nato%')))
在自定义模块的 sales_order_grid 文件中添加以下代码
<column name="products" class="Custom\Module\Ui\Component\Listing\Columns\ProductName">
<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">Items Name</item>
<item name="disableAction" xsi:type="boolean">true</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="number">3</item>
</item>
</argument>
</column>
然后在 Custom\Module\Ui\Component\Listing\Columns 创建 UI 组件列
class ProductName extends Column
{
protected $_orderRepository;
protected $_searchCriteria;
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
OrderRepositoryInterface $orderRepository,
SearchCriteriaBuilder $criteria,
array $components = [],
array $data = [])
{
$this->_orderRepository = $orderRepository;
$this->_searchCriteria = $criteria;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
foreach ($dataSource['data']['items'] as &$items) {
$productArr = [];
$order = $this->_orderRepository->get($items["entity_id"]);
foreach ($order->getAllVisibleItems() as $item) {
$productArr[] = $item->getName(); //to get product name
}
$items['products'] = implode(" , " , $productArr);
unset($productArr);
}
}
return $dataSource;
}
}
【问题讨论】:
标签: magento2