1

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

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

代码有什么问题???

加布里埃尔

4

2 回答 2

0
$data->carShippeds[0]->

这向我们表明,目前的车型有很多汽车出货。您只在其中显示第一个。虽然这样可行,但 Yii 无法知道您只显示第一个值,因此您的排序没有机会工作。创建一个仅选择您的第一个取货日期的视图,将您的标准与主模型连接起来,显示没有 [0]-> 的字段,它将起作用。

于 2014-03-13T21:26:45.527 回答
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你有你的t.carShippeds,甚至它是否是t或另一个实体。替换它或向我提供有关您的 DataProvider 的更多信息,我可以提供更多帮助。

于 2017-07-30T08:20:13.523 回答