简体   繁体   English

YII排序中的CArrayDataProvider在某些字段上不起作用

[英]CArrayDataProvider in YII sorting not working on some fields

I have created Dataprovider in controller and pass it to view file. 我已经在控制器中创建了Dataprovider并将其传递给视图文件。 It display correct Data. 它显示正确的数据。 There are total 7 columns to display. 共显示7列。 But only on 2 fields sorting is not working and throwing ERROR-500. 但是仅在2个字段上排序不起作用,并引发ERROR-500。

In controller File, my Code is : 在控制器文件中,我的代码是:

    $OutboundRatecardDetails_data = OutboundRatecardDetails::model()->findAllByAttributes(array('orc_id'=>$orc_id));

    $pageSize = 10;
    if(isset($_GET['pageSize']))
    {
        $pageSize = $_GET['pageSize'];
        Yii::app()->user->setState('pageSize', (int)$_GET['pageSize']);
        unset($_GET['pageSize']);
    }

    $dataProvider=new CArrayDataProvider($OutboundRatecardDetails_data, array(
        'id'=>'orcd_id',
        'sort'=>array(
        'attributes'=>array(
            'orcd_id', 'des_id', 'orcd_duration','orcd_rate','orcd_grace_duration','orcd_description'
        ),
        ),
        'pagination'=>array(
        'pageSize'=>$pageSize,
        ),
        'keyField'=>'orcd_id',
    ));

    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));

In admin.php view file, my code is : 在admin.php视图文件中,我的代码是:

    <?php  $this->widget('application.components.widgets.tlbExcelView', array(
        'id'=>'Outbound-rate-card-details-grid',
        'dataProvider'  =>$dataProvider,
        'itemsCssClass' =>'table table-bordered table-striped table-condensed',
        'pagerCssClass' =>'dataTables_paginate paging_bootstrap pagination',
        'htmlOptions'   =>array('class'=>'adv-table'),        
        'columns'=>array(
            'des_id'=>array(
            'name'=>'des_id',
            'header'=>'Destination',                
            'value' => '(!empty($data->rel_destination->des_prefix) ? $data->rel_destination->des_prefix : "")',
            ),

            array(
            'name'=>'orcd_grace_duration',
            'header'=>'Grace Duration',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),

            array(
            'name'=>'orcd_duration',
            'header'=>'Incr. Duration',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),

            array(
            'name'=>'orcd_rate',
            'header'=>'Incr. Rate',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),

            array(
            'name'=>'orcd_min_duration',
            'header'=>'Min. Duration',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),

            array(
            'name'=>'orcd_min_rate',
            'header'=>'Min. Rate',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),

            array(
            'name'=>'orcd_description',
            'header'=>'Rate Description',
            'htmlOptions' => array('style' => 'max-width:150px; white-space:normal;word-break:break-all;'),
            ),
        ),
    )); ?>

When I try to sort on 2nd and 3rd field (orcd_grace_duration,orcd_duration), it throws error. 当我尝试在第二和第三字段(orcd_grace_duration,orcd_duration)上排序时,会引发错误。 Error screenshot is also attached. 错误屏幕截图也已随附。 Other than these 2 fields, sorting is perfectly working. 除了这两个字段之外,排序还可以正常工作。

在此处输入图片说明

This issue occurs when CArrayDataProvider's columns having same values. 当CArrayDataProvider的列具有相同的值时,会发生此问题。 Try using CActiveDataPrider instead. 尝试改用CActiveDataPrider。

You just need to change code in your controller like below: 您只需要在控制器中更改代码,如下所示:

    $criteria = new CDbCriteria;
    $criteria->compare('orc_id',$orc_id,true);

    $dataProvider = new CActiveDataProvider('OutboundRatecardDetails', array(
            'criteria'=>$criteria,
            'sort'         =>  array(
                'defaultOrder' =>  'orc_id desc',
            ),
            'pagination'=>array(
            'pageSize'=>$pageSize,
        ),
    ));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM