Что не так с утверждением, в 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()
,