【问题标题】:Yii CActiveDataProvider items count differentYii CActiveDataProvider 项目计数不同
【发布时间】:2015-01-15 14:51:40
【问题描述】:

我是 Yii 的新手。我在 Yii 中有以下代码。

public function actionExport($typeid=0, $locationid=0, $sidx='date_input', $sord='desc',  

$kategori='', $to = 'xls'){
    // inisialisasi criteria query
    $criteria = new CDbCriteria();
    $criteria->order = "$sidx $sord";

    // filter lokasi
    if (is_numeric($locationid) && $locationid !== 0)
    {
        $criteria->with = array('data'=>array(
            'condition'=>'data.locationid=:locationid',
            'params'=>array(':locationid'=>$locationid)
        ));
    } else {
        if (is_numeric($typeid) && $typeid !== 0)
        {
            $criteria->with = array('data.location'=>array(
                'with'=>array(
                    'type'=>array(
                        'condition'=>'type.typeid=:typeid',
                        'params'=>array(':typeid'=>$typeid)
                    )
                )
            ));
        } else {
            $criteria->with = array('data.location'=>array(
                'with'=>array(
                    'type'=>array(
                        'condition'=>'type.type_desc=:type_desc',
                        'params'=>array(':type_desc'=>$kategori)
                    )
                )
            ));
        }
    }

    // filter range tanggal
    if (isset($_REQUEST['startdate'], $_REQUEST['enddate']))
    {
        $startdate = $_REQUEST['startdate'];
        $enddate = $_REQUEST['enddate'];
        $criteria->condition = 'date_input <= :enddate AND date_input >= :startdate';
        $criteria->params = array(':startdate'=>$startdate, ':enddate'=>$enddate);
    }

    $dataProvider = new CActiveDataProvider('InputData', array(
        'criteria'=>$criteria
    ));

    echo $dataProvider->getTotalItemCount(); // this is about 5623

    if($to == 'xls'){
        $this->_toXls($dataProvider->getData());
    }else{

    }
}

这一行 echo $dataProvider-&gt;getTotalItemCount() 打印 5623,但在循环 this-&gt;_toXls() 中打印在 excel 文件中的行只有 10 行。当我使用print_r($dataProvider-&gt;getData()) 调试数据提供者时,结果相同,它是 10 项。

我写代码有错吗?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    您需要禁用分页:

    $dataProvider = new CActiveDataProvider('InputData', array(
        'criteria' => $criteria
        'pagination' => false
    ));
    

    作为补充,您可能需要分批迭代您的项目以节省内存,如this answer

    【讨论】:

      【解决方案2】:

      不,你没有错。这只是 DataProvider 分页。你可以这样关闭它

      $dataProvider = new CActiveDataProvider('InputData', array(
          'criteria'=>$criteria,
          'pagination' => FALSE,
      ));
      

      【讨论】:

        【解决方案3】:

        您应该检查 $dataProvider 是否分页:

         $dataProvider = new CActiveDataProvider('InputData', array(
            'criteria'=>$criteria,
            'pagination' => array(
                'pageSize' => 25,
            ),
        ));
        

        试试这个,看看行数是否为 25。

        要删除分页,您只需将分页设置为 false。

         $dataProvider = new CActiveDataProvider('InputData', array(
           'criteria'=>$criteria,
           'pagination' => false,
          ),
        ));
        

        链接:http://www.yiiframework.com/doc/api/1.1/CDataProvider#pagination-detail

        【讨论】:

        • 正确的方法是将分页设置为false。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        相关资源
        最近更新 更多