Retreving specific row from database in yii

岁酱吖の 提交于 2019-12-24 21:27:55

问题


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);
    }

In view

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' =>$model->search() 

// 'filter' => $model, /* not using this option ,so commented it */ ))

In model

// Do I really Need This Function // public function search() {

    $criteria = new CDbCriteria;

   $criteria->compare('user_id', $this->user_id, true);
    return new CActiveDataProvider('viewjob', array(
       'criteria'=>$criteria,

    ));
},,

What am I doing wrong here.It is still fetching all the available rows in table.


回答1:


You define $model 3 times:

$model=  ViewJob::model()->findAll(array(
     'select'=>'*',"condition"=>"user_id='$user_id'",
));

Then

$model = new Viewjob('search');

And

'dataProvider' =>$model->search() 

Choose one that you need, better last. And add to controller

$model->user_id = $user_id

It will works.




回答2:


Create new CDbCriteria object and add condition using it and pass it to model. In Controller:

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);
}

And in View, simply:

$this->widget('zii.widgets.grid.CGridView', array(
 'dataProvider' =>$model 

Also for use Authentication, in your controller you don't need to check, if user has the user id, simply add access rules, which will automatically redirect user to the login page to view the job and once they are logged-in, will return them to the same page. So, add this at the top of our controller..

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('*'),
            ),
        );
    }


来源:https://stackoverflow.com/questions/23008830/retreving-specific-row-from-database-in-yii

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!