0
我正在Yii框架中工作。在我的索引行動我通過以下方式產生的數據提供程序爲foreach提供的參數無效()
$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,
),
));
然後我渲染索引視圖
$this->render('index',array(
'dataProvider'=>$dataProvider,
'category_id'=>$category_id,
));
索引視圖做
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>
這導致錯誤
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 }
你能幫我嗎? 提前致謝
非常感謝。它通過了ClistView,但在我的_view.php中出現錯誤在第8行的C:\ wamp \ www \ contest \ protected \ views \ contest \ _view.php中的非對象上調用成員函數getAttributeLabel該命令是<?php echo CHtml :: encode($ data-> getAttributeLabel('id')); ?>: – klark
這是因爲您要傳入CActiveDataProvider的'rawData'只是一個數據數組。爲了能夠使用getAttributeLabel() - CModel/CActiveRecord方法 - 非常理想,您需要向CActiveDataProvider發送一個CActiveRecord對象數組。你需要修改你的數據庫查詢來做到這一點 - 使用CDbCriteria我建議 – JamesG
實際上,我想避免使用Activerecord來獲得更好的數據庫訪問對象(DAO)性能, – klark