我有一个小应用程序,我需要解决几个问题:
需要使用默认排序顺序设置字段。这是我现在的代码
$crud->grid->getColumn('JOB_NO')->makeSortable();
网格显示排序图标,但我想将此字段的默认排序设置为降序。
JOB_NO字段包含字母数字作业号:N999,N1000,N1001等...
排序正在运行,但它将N999置于顶部而N1000和N1001甚至不会在页面后面的几页中找到。 如何设置排序以确保更高的工作号码保持在最高位置?可能基本上忽略了第一个字母? 感谢
答案 0 :(得分:1)
1)如何做到这一点有两种选择。
第一个选项是向Model添加排序,而不是直接添加到网格。
然后你可以使用:
$model->addField('foo')->sortable(true);
$model->setOrder('foo','desc');
第二个选项(如果您希望或必须在网格级别执行此操作):
$grid->getColumn('foo')->makeSortable('-');
// or even (not sure, didn't test this)
$grid->makeSortable('-foo');
2)不确定如何做到这一点,但您可以尝试以下方法之一:
答案 1 :(得分:0)
我建议你有一个单独的字段进行排序。
首先在数据库和模型内创建字段“foo_sort”。将其设置为系统字段,因此默认情况下不会显示在UI中:
$model->addField('foo_sort')->system(true);
$model->setOrder('foo_sort');
然后创建一个钩子,它将在保存模型之前计算字段的值:
$model->addHook('beforeSave',function($m){
$m['foo_sort']=substr(0,1,$m['foo']);
});
您无需执行任何其他操作,也许手动更新数据库中的现有记录。此方法可用于许多其他方案,以维护排序字段,例如从全文搜索数据中删除HTML。