【问题标题】:Create pagination in yii framework在 yii 框架中创建分页
【发布时间】:2015-11-06 08:22:18
【问题描述】:

我想在没有网格视图或模型的页面上创建分页。 这是我的控制器代码:-

        $providers = Yii::app()->db->createCommand($query)->queryAll();
        $count = Yii::app()->db->createCommand($query)->queryAll();

        $dataProvider = new CSqlDataProvider($query, array(
           'totalItemCount' => $count,
           'pagination' => array(
               'pageSize' => 10,
           ),
        ));

我的视图代码是:-

        <?php $this->widget('zii.widgets.grid.CGridView', array(
           'id'=>'students-grid',
           'dataProvider'=> $dataProvider, 
        )); ?>

但是当我运行它时,它会显示错误消息

    "Array to string conversion"

我尝试过的第二个选项是:-

        $criteria = new CDbCriteria();
        $count = Yii::app()->db->createCommand($query)->queryAll();
        $pages = new CPagination($count);

        // results per page
        $pages->pageSize=10;
        $pages->applyLimit($criteria);

        //$models=Article::model()->findAll($criteria);

但是我不知道如何使用这段代码,因为我暂时没有模型。在模型的地方我可以使用什么?

【问题讨论】:

  • 你能显示变量$query吗?
  • 为什么你使用两个相同的查询?也许这种方式更正确? $providers = Yii::app()-&gt;db-&gt;createCommand($query)-&gt;queryAll(); $count = count($providers);
  • @DanilaGanchar 请检查这个我在这里粘贴查询pastebin.com/vcqNMEZw
  • 现在你的$count 是数组,而不是整数。 totalItemCount 必须是整数。 Public Properties of CSqlDataProvider
  • @DanilaGanchar 现在我正在使用 $count=count(Yii::app()->db->createCommand($query)->queryAll());这是整数值,但问题仍然......

标签: php gridview yii pagination


【解决方案1】:

试试这个。希望对您有所帮助。

//controller
$count = Yii::app()
   ->db //your count of records
   ->createCommand('
      select COUNT(*) AS total
        from providers p 
        left join providers_facilities_services fs on fs.provider_guid = p.provider_guid 
        left join lkup_facilitytypes l on l.lkup_facilitytype_id = fs.lkuptype_id and fs.type='F' left join providers_media m on m.provider_guid = p.provider_guid 
        left join providers_contacts as comp on comp.provider_guid= p.provider_guid where p.provider_class='F' and comp.contact_type='U' and fs.type='F' and p.deleted = 'N' and fs.lkuptype_id =5 HAVING distance <= 20000
   ')
   ->queryColumn();

$dataProvider = new CSqlDataProvider($query, array(
    'totalItemCount' => $count[0],
    'pagination' => array(
        'pageSize' => 10,
    ),
));

//view
<?php $this->widget('zii.widgets.grid.CGridView', array(
       'id' => 'students-grid',
       'dataProvider'=> $dataProvider, 
)); ?>

【讨论】:

  • 首先我看到的是:您的示例中没有'id' =&gt; 'students-grid'。第二。尝试检查您的$query。设置为totalItemCount 测试值(例如200)。 $dataProvider = new CSqlDataProvider($query, array( 'totalItemCount' =&gt; 200, 'pagination' =&gt; array( 'pageSize' =&gt; 10, ), ));。如果存在问题,那么您的 sql 中存在问题。
  • 当我使用这个代码时:- $providers = Yii::app()->db->createCommand($query)->queryAll(); $criteria=新 CDbCriteria(); $count = count(Yii::app()->db->createCommand($query)->queryAll()); $pages=new CPagination($count); $pages->pageSize=10; $pages->applyLimit($criteria); $providerreports = Yii::app()->db->createCommand($query)->queryAll($criteria);它显示页面上的所有记录但是当我使用“$providerreports=ProviderReport::model()->findAll($criteria);”这一行显示 10 个结果,但我没有模型,所以请告诉我上面代码的错误是什么
  • 这是因为在第一个示例中您使用Yii::app()-&gt;db-&gt;createCommand($query)-&gt;queryAll($criteria),但在第二个示例中:ProviderReport::model()-&gt;findAll($criteria)。尝试将您的 sql 转换为CDbCriteriaHere 示例。它将与CPagination + ProviderReport::model()-&gt;findAll($criteria) 一起使用。
  • 更新你的问题。现在没有错误数组到字符串的转换
  • 但是我没有模型,我想用这行 Yii::app()->db->createCommand($query)->queryAll($criteria) 代替这个 ProviderReport::模型()->findAll($criteria)
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 2013-07-11
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多