Tôi đã thêm cột tùy chỉnh vào lưới quản trị, như thế này
<column name="customer_name" class="Vendor\Module\Ui\Component\Listing\Columns\CustomerName">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="editor" xsi:type="string">text</item>
<item name="sortable" xsi:type="string">true</item>
<item name="label" xsi:type="string" translate="true">Customer Name</item>
<item name="sortOrder" xsi:type="number">30</item>
</item>
</argument>
</column>
Trong lớp CustomerName của tôi, tôi tạo các giá trị cho cột này:
public function prepareDataSource(array $dataSource)
{
$fieldName = $this->getData('name');
foreach ($dataSource['data']['items'] as & $item) {
$customer = $this->customerRepository->getById($item['customer_id']);
$name = $customer ? $customer->getFirstName().' <'.$customer->getEmail().'>' : '';
$item[$fieldName] = $name;
}
return $dataSource;
}
Nó hiển thị trong lưới như mong đợi. Nhưng khi tôi cố gắng sắp xếp theo cột hoặc bộ lọc này - đã xảy ra lỗi
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'customer_name' in 'order clause'
Làm thế nào tôi có thể sửa lỗi này?
CẬP NHẬT
Bây giờ tôi thử giải quyết vấn đề này bằng cách xóa lớp CustomerName (và xóa tham chiếu đến nó trong thẻ cột trong xml) và thay vào đó tôi đã thêm hàm _renderFiltersB Before () trong lớp bộ sưu tập của mình
protected function _renderFiltersBefore() {
$joinTable = $this->getTable('customer_entity');
$this->getSelect()->join($joinTable.' as customer_entity','main_table.customer_id = customer_entity.entity_id', array('*'));
$this->getSelect()->columns('CONCAT(firstname," <",email,">") as customer_name');
parent::_renderFiltersBefore();
}
Bây giờ sắp xếp đang hoạt động, nhưng lọc không (nhận cùng một lỗi)