1

我再次发布现有帖子,但有一些更改。实际上,在上一篇文章中,我遇到了“为 foreach 提供的参数无效”错误,该错误已通过用户提出的解决方案解决,将 $command->execute() 更改为 $command->queryAll()。这帮助我完成了 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>

你能帮助我吗?先感谢您

4

2 回答 2

1

这个变量$data是一个没有属性的数组getAttributeLabel()。您需要使用这种方法:

CHtml::encode(Users::model()->getAttributeLabel('id'))

Where Users- 您需要获取标签的模型的名称。

于 2014-03-03T14:37:56.360 回答
0

我认为你应该使用queryAll()而不是execute()

$rawData = $command->queryAll();

http://www.yiiframework.com/doc/api/1.1/CDbCommand/#execute-detail

此方法仅用于执行非查询 SQL 语句。不会返回任何结果集。

于 2014-03-03T13:27:01.900 回答