按日期排序列TbJSONGridView

时间:2014-03-13 18:13:28

标签: php gridview yii yii-booster

我想按日期对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',
        ),
))

但是我得到的列来自相关模型,排序不起作用,当我点击列标题时它什么也没做。

代码有什么问题???

加布里埃尔

2 个答案:

答案 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的信息,我可以提供更多帮助。