在yii中从数据库中检索特定行

时间:2014-04-11 09:34:55

标签: php yii yii-components zii-widgets

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,/ *没有使用这个选项,所以评论它* / ))

在模型中

//我真的需要这个功能//    公共功能搜索(){

    $criteria = new CDbCriteria;

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

    ));
},,

我在这里做错了什么。它仍在获取表格中的所有可用行。

2 个答案:

答案 0 :(得分:0)

你定义$ model 3次:

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

然后

$model = new Viewjob('search');

并且

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

选择一个你需要的,最后一个。并添加到控制器

$model->user_id = $user_id

它会起作用。

答案 1 :(得分:0)

创建新的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 

另外,对于使用身份验证,在您的控制器中,您不需要检查,如果用户具有用户ID,只需添加访问规则,这将自动将用户重定向到登录页面以查看作业,一旦他们是登录后,会将它们返回到同一页面。所以,将它添加到我们控制器的顶部..

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