У меня есть код в моем контроллере,
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, но я не получаю результат, т. е. его не фильтруя данные, help.
просмотр раздела:
// 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 */ ),?>
Неправильный метод. Вы должны использовать 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()
.