Jump to content
Larry Ullman's Book Forums

Invalid Argument Supplied For Foreach() Using Carraydataprovider


sanfisa
 Share

Recommended Posts

Hello,

 

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         }

 

When I use $rawData = $command->queryAll();  instead of       $rawData = $command->execute();

 

I got the error

 

Call to a member function getAttributeLabel() on a non-object in C:\wamp\www\contest\protected\views\contest\_view.php on line 8

 

where the code is

 

<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>

 

 

 

Can you help me?
Thank you in advance

 

 

Link to comment
Share on other sites

$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();
// or using: $rawData=User::model()->findAll();
$dataProvider=new CArrayDataProvider($rawData, array(
    'id'=>'user',
    'sort'=>array(
        'attributes'=>array(
             'id', 'username', 'email',
        ),
    ),
    'pagination'=>array(
        'pageSize'=>10,
    ),
));
// $dataProvider->getData() will return a list of arrays.

With CActiveDataProvider queryAll() or findAll() you insert in for your $rawData, so i am guess the problems is happening in your views files from trying to interpret the returned data from the CActiveDataProvider.

 

Can you show us more of the _view.php code and possibly do a print_r surrounded by some HTML <pre> (preformatted tags) of the data attribute $dataProvider you are passing to the _view.php file and post it up here.

<pre>
    <?php print_r($dataProvider); ?>
</pre
  • Upvote 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...