Что не так с утверждением, в Yii?

У меня есть следующий код в моем контроллере,

   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 */

         ),?>

1 ответ

Решение

Неправильный метод. Вы должны использовать 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, У вас есть два варианта здесь:

а) Вы можете редактировать свой контроллер для использования $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,
    );
    ...

б) Заменить $model->search() в представлении с

    'dataProvider' => new CArrayDataProvider($model)

Выбор (б) проще, но он нарушает соглашения, например $model это массив, а не объект. Также любые фильтры / функции поиска должны быть добавлены вручную, в отличие от использования функций по умолчанию, предоставляемых CActiveRecord::search(),

Другие вопросы по тегам