我再次发布现有帖子但有一些更改。实际上,在上一篇文章中,我提出了一个“为foreach提供的无效参数”错误,该错误由建议的用户解决方案解决,通过$ command-> queryAll()更改$ command-> execute()。这有助于我浏览ClistView,但是当我尝试渲染_view视图时,我收到了错误:
在第8行的C:\ wamp \ www \ contest \ protected \ views \ contest_view.php中的非对象上调用成员函数getAttributeLabel(),其中命令是getAttributeLabel('id')); ?>
这是正常的,因为我从CArrayDataProvider得到的是一个数组。根据用户的建议,我应该使用CActiveDataProvider一个CActiveRecord数组。实际上,我正在使用DAO来获得更好的性能,并且希望避免使用CActiveRecord。
按照代码更好地了解我正在做的事情。
在我的索引操作中,我按以下方式创建了数据提供者
$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->queryAll();
$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',
)); ?>
我收到了错误
在第8行的C:\ wamp \ www \ contest \ protected \ views \ contest_view.php中的非对象上调用成员函数getAttributeLabel()
代码是
<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
你能帮帮我吗?
提前谢谢
答案 0 :(得分:1)
此变量$data
是一个没有属性getAttributeLabel()
的数组。你需要使用这种方法:
CHtml::encode(Users::model()->getAttributeLabel('id'))
其中Users
- 获取标签所需的模型名称。
答案 1 :(得分:0)
我认为您应该使用queryAll()
代替execute()
:
$rawData = $command->queryAll();
http://www.yiiframework.com/doc/api/1.1/CDbCommand/#execute-detail
此方法仅用于执行非查询SQL语句。不会返回任何结果集。