使用ClistView和DAO - 在非对象上调用成员函数getAttributeLabel()

时间:2014-03-03 13:17:39

标签: php yii dao clistview

我再次发布现有帖子但有一些更改。实际上,在上一篇文章中,我提出了一个“为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>
你能帮帮我吗? 提前谢谢

2 个答案:

答案 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语句。不会返回任何结果集。