1

既存の投稿を再投稿しますが、いくつかの変更があります。実際、以前の投稿で、「foreach に無効な引数が指定されました」というエラーがありましたが、これは、$command->execute() を $command->queryAll() で変更するというユーザーの提案された解決策によって解決されました。これは ClistView を通過するのに役立ちましたが、_view ビューをレンダリングしようとすると、次のエラーが発生しました。

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',
)); ?>

エラーが発生しました

C:\wamp\www\contest\protected\views\contest_view.php の 8 行目の非オブジェクトでメンバー関数 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 に答える