1

我的控制器中有以下代码,

   public function actionViewJob() {

        $user_id = Yii::app()->session['user_id'];
        /* For User Authentication */
        if (Yii::app()->user->getId() === null)
            $this->redirect(array('site/login'));
        /* For User Authentication */

         $model=ViewJob::model()->findAll(array('user_id'=>Yii::app()->user->id));
        $params = array('model' => $model,
        );

        $this->render('viewjob', $params);

我收到错误 /* 未定义属性“CDbCriteria.user_id”。*/ 但是当我使用 findByAttrinute 它的工作 f9 时,但我没有得到结果,即它没有过滤数据,请帮忙。

查看部分:

// not posting full code //


   <?php
        $this->widget('zii.widgets.grid.CGridView', array(
            'dataProvider' =>$model->search(),  

'columns' => array(
            array(
                'name' => 'title',
                'type' => 'raw',
                'value' => 'CHtml::encode($data->title)',
                'htmlOptions' => array('style'=>'width:90px;','class'=>'zzz'),
               // 'filter'=>'false' /* for hiding filter boxes */

         ),?>
4

1 回答 1

2

错误的方法。你应该CActiveRecord::findAllByAttributes()改用

$model=ViewJob::model()->findAllByAttributes(array('user_id'=>Yii::app()->user->id));

或者,如果您仍想使用findAll,则应将属性作为条件传递:

$model=ViewJob::model()->findAll('user_id=:user_id',array(':user_id'=>Yii::app()->user->id));

现在来看:

dataProvider需要一个CDataProvider. CActiveRecord::search()返回一个这样的实例:CActiveDataProvider. 但是,$model数组不是CActiveRecord. 您在这里有两个选择:

a)您可以编辑控制器以$model用作ViewJob实例而不是实例数组ViewJob

public function actionViewJob() {

    $user_id = Yii::app()->session['user_id'];
    /* For User Authentication */
    if (Yii::app()->user->getId() === null)
        $this->redirect(array('site/login'));
    /* For User Authentication */

    $model= new ViewJob;
    $model->user_id = $user_id;
    $params = array('model' => $model,
    );
    ...

b)将$model->search()视图中的替换为

    'dataProvider' => new CArrayDataProvider($model)

选择 (b) 更容易,但它打破了约定,例如$model是数组而不是对象。此外,任何过滤器/搜索功能都必须手动添加,而不是使用CActiveRecord::search().

于 2014-04-11T10:29:28.607 回答