Saya menambahkan kolom khusus ke admin grid, seperti ini
<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>
Di kelas CustomerName saya, saya membuat nilai untuk kolom ini:
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;
}
Itu ditampilkan di grid seperti yang diharapkan. Tetapi ketika saya mencoba mengurutkan berdasarkan kolom atau filter ini - terjadi kesalahan
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'customer_name' in 'order clause'
Bagaimana saya bisa memperbaikinya?
MEMPERBARUI
Sekarang saya mencoba menyelesaikan masalah ini dengan menghapus kelas CustomerName (dan menghapus referensi dalam tag kolom di xml) dan sebagai gantinya saya menambahkan fungsi _renderFiltersBefore () di kelas koleksi saya
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();
}
Sekarang penyortiran berfungsi, tetapi penyaringan tidak (dapatkan kesalahan yang sama)