我一直在使用[本] [1]解決方案ORDER BY
多個列版本2.2.*
它一直運行良好近一年。索納塔管理v2.3 - 多排排序=假排序
最近升級到版本2.3.*
,並且該列表未再訂購結果。
我注意到,如果我設置至少一列爲sortable
,事情將恢復正常。在我的情況下,我將所有列設置爲'sortable' => false
,但我仍然希望按特定順序查看事件;我只是不希望用戶選擇排序順序!
有什麼辦法讓這個工作再次?
我一直在使用[本] [1]解決方案ORDER BY
多個列版本2.2.*
它一直運行良好近一年。索納塔管理v2.3 - 多排排序=假排序
最近升級到版本2.3.*
,並且該列表未再訂購結果。
我注意到,如果我設置至少一列爲sortable
,事情將恢復正常。在我的情況下,我將所有列設置爲'sortable' => false
,但我仍然希望按特定順序查看事件;我只是不希望用戶選擇排序順序!
有什麼辦法讓這個工作再次?
這是由於下面的新增version;如果ProxyQuery::getSortOrder()
不返回任何內容,則將刪除orderBy
選項。
在這種情況下,該方法由Datagrid::buildPager()
IF和ONLY自動調用如果列表配置至少有一列設置爲'sortable' => true
,請參閱DataGrid.php#L126。如果所有列都不可排序,則自定義ORDER BY
選項將被刪除!
多列上ORDER BY
的唯一方法是確保方法ProxyQuery::setSortOrder
在某些時候被調用請參見ProxyQuery.php#140。
我不確定這是一種意想不到的副作用,或者它是如何工作的設計。
若要解決此任設至少一列'sortable' => true
(或不設置排序的話)或修改createQuery
方法在您的管理類,像這樣:
public function createQuery($context = 'list')
{
$proxyQuery = parent::createQuery($context);
// Default Alias is "o"
$proxyQuery->orderBy('o.name', 'ASC');
// This can only be used for a single column.
$proxyQuery->setSortBy([], ['fieldName' => 'date']);
$proxyQuery->setSortOrder('DESC');
return $proxyQuery;
}
在索納塔管理2.3版這個簡單的解決方案可以使用或不使用可排序的列:
public function createQuery($context = 'list')
{
$proxyQuery = parent::createQuery($context);
$proxyQuery->orderBy('o.root', 'ASC');
$proxyQuery->addOrderBy('o.lft', 'ASC');
return $proxyQuery;
}