我想按日期对TbJSONGridView中的列进行排序,我有这段代码
$this->widget(
'bootstrap.widgets.TbJsonGridView', array(
'dataProvider' => $model->searchPending(),
'type' => 'striped bordered condensed',
'summaryText' => false,
'cacheTTL' => 10, // cache will be stored 10 seconds (see cacheTTLType)
'cacheTTLType' => 's', // type can be of seconds, minutes or hours
'enablePagination' => true,
'columns' => array(
array(
'name' => 'Pickup Date',
'value' => '$data->carShippeds[0]->pickup_date',
'type'=>'date',
),
))
但是我得到的列来自相关模型,排序不起作用,当我点击列标题时它什么也没做。
代码有什么问题???
加布里埃尔
答案 0 :(得分:0)
$data->carShippeds[0]->
这向我们展示了目前的型号有很多车出货。你只是在那里展示第一个。虽然这有效,Yii无法知道你只是显示第一个值,所以你的排序没有机会工作。创建一个仅选择您的第一个取件日期的视图,使用主模型在您的条件中进行连接,显示不带[0]的字段 - >它会起作用。
答案 1 :(得分:0)
更改以下部分:
array(
'name' => 'Pickup Date',
'value' => '$data->carShippeds[0]->pickup_date',
'type'=>'date',
),
对此:
array(
'name' => 'pickup_date',
'header' => 'Pickup Date',
'value' => '$data->carShippeds[0]->pickup_date',
'type'=>'date',
),
然后以你的形式'当您想要返回DataProvider
时,请为此association
写下特定的排序代码,如下所示:
return new DataProvider($query, [
'pagination' => [
'pagesize' => 20,
],
'sort' => [
'sortVar' => 'sort',
'defaultOrder' => ['t.carShippeds.pickup_date asc'],
'attributes' => [
'pickup_date' => [
'asc' => 't.carShippeds.pickup_date',
'desc' => 't.carShippeds.pickup_date DESC',
],
'*',
],
],
]);
请注意,我不知道您join alias
的{{1}},或者甚至不知道t.carShippeds
或其他实体。替换它或给我更多关于你的DataProvider的信息,我可以提供更多帮助。