Question

I'm working in Yii framework. In my index action I created the dataprovider in the following way

$connection=Yii::app()->db;
$user_id = Yii::app()->user->id;
$sql = 'SELECT * FROM post
        LEFT JOIN comment ON post.id = comment.post_id
        AND comment.user_id =:user_id
        LIMIT 0 , 30 ';
$command=$connection->createCommand($sql);
$command->bindParam(':user_id', $user_id,PDO::PARAM_STR);

$rawData = $command->execute();

$dataProvider=new CArrayDataProvider($rawData, array(
                    'id'=>'user',
                    'sort'=>array(
                    'defaultOrder' => 'post.created',
                    ),
                    'pagination'=>array(
                    'pageSize'=>10,
                    ),
        ));

then I render the index view

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

Index view is doing

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); ?>

which cause the error

Invalid argument supplied for foreach()

C:\wamp\www\yii\framework\web\CArrayDataProvider.php(140)

     * @param array $directions the sorting directions (field name => whether it is descending sort)
      */

     136         foreach($directions as $name=>$descending)
137         {
138             $column=array();
139             $fields_array=preg_split('/\.+/',$name,-1,PREG_SPLIT_NO_EMPTY);
140             foreach($this->rawData as $index=>$data)
141                 $column[$index]=$this->getSortingFieldValue($data, $fields_array);
142             $args[]=&$column;
143             $dummy[]=&$column;
144             unset($column);
145             $direction=$descending ? SORT_DESC : SORT_ASC;
146             $args[]=&$direction;
147             $dummy[]=&$direction;
148             unset($direction);
149         }

Can you help me? Thank you in advance

Was it helpful?

Solution

If you var_dump($rawData), you'll see that it's an integer (or 0) and is only returning the number of results.

This is because you're using $command->execute() when you should be using:

$command->queryAll();

That will return you an array of results which you can pass into the CActiveDataProvider

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top