簡體   English   中英

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

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

我已經在控制器中創建了Dataprovider並將其傳遞給視圖文件。 它顯示正確的數據。 共顯示7列。 但是僅在2個字段上排序不起作用,並引發ERROR-500。

在控制器文件中,我的代碼是:

    $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,
    ));

在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;'),
            ),
        ),
    )); ?>

當我嘗試在第二和第三字段(orcd_grace_duration,orcd_duration)上排序時,會引發錯誤。 錯誤屏幕截圖也已隨附。 除了這兩個字段之外,排序還可以正常工作。

在此處輸入圖片說明

當CArrayDataProvider的列具有相同的值時,會發生此問題。 嘗試改用CActiveDataPrider。

您只需要在控制器中更改代碼,如下所示:

    $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