Получение определенной строки из базы данных в 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('*'),
            ),
        );
    }
Другие вопросы по тегам