Получение определенной строки из базы данных в yii
I am working on a job site,And want to show only the jobs posted by a particular user in cgridview.My actuall aim is to authenticate the user so that only jobs posted by him/her will be visible in cgridview.I have done the following stuff,but not working.
In controller:
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 */
/* Have tried the following codes to filter */
$model= ViewJob::model()->findAll(array(
'select'=>'*',"condition"=>"user_id='$user_id'",
));
// $model=ViewJob::model()->findByAttributes(array('user_id'=>Yii::app()->user->id));
// $model = ViewJob::model()->findAll("user_id=$user_id");
$model = new Viewjob('search');
$params = array('model' => $model,
);
$this->render('viewjob', $params);
}
Ввиду
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' =>$model->search()
// 'filter' => $model, /* не используя эту опцию, поэтому прокомментировал ее */))
В модели
// Мне действительно нужна эта функция // public function search() {
$criteria = new CDbCriteria;
$criteria->compare('user_id', $this->user_id, true);
return new CActiveDataProvider('viewjob', array(
'criteria'=>$criteria,
));
},,
Что я делаю здесь не так. Он по-прежнему выбирает все доступные строки в таблице.
2 ответа
Вы определяете $ модель 3 раза:
$model= ViewJob::model()->findAll(array(
'select'=>'*',"condition"=>"user_id='$user_id'",
));
затем
$model = new Viewjob('search');
А также
'dataProvider' =>$model->search()
Выберите тот, который вам нужен, лучше последний. И добавить в контроллер
$model->user_id = $user_id
Это будет работать.
Создайте новый объект CDbCriteria, добавьте к нему условие и передайте его в модель. В контроллере:
public function actionViewJob() {
$criteria = new CDbCriteria ();
$criteria->condition = 'user_id=' . Yii::app()->user->id;
$model = ViewJob::model()->findAll($criteria);
$params = array('model' => $model);
$this->render('viewjob', $params);
}
А во View просто:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' =>$model
Также для использования Аутентификации, в вашем контроллере вам не нужно проверять, есть ли у пользователя идентификатор пользователя, просто добавьте правила доступа, которые автоматически перенаправят пользователя на страницу входа для просмотра задания, и как только они войдут в систему, верните их на ту же страницу. Итак, добавьте это в верхней части нашего контроллера..
class YourController extends Controller {
public function filters() {
return array(
'accessControl', // perform access control
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules() {
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions' => array('index', 'view'),
'users' => array('*'),
),
array('allow', // allow authenticate user actions
'actions' => array('viewjob'),
'users' => array('@'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}